home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr01 / halcn305.zip / GS_HELP.ASC < prev    next >
Text File  |  1993-08-12  |  136KB  |  3,634 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.                                BASIC DOCUMENTATION
  13.  
  14.  
  15.  
  16.                                   ┌───────────┐
  17.                                   │  HALCYON  │
  18.                                   └───────────┘
  19.  
  20.                                    Version 3.0
  21.  
  22.  
  23.  
  24.                                 GRIFFIN SOLUTIONS
  25.  
  26.  
  27.                          dBase III, IV Access Routines
  28.                                Using Turbo Pascal
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.                                 12 August 1993
  37.  
  38.              (C) Copyright 1991,1992, 1993 - All Rights reserved
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.                              Griffin Solutions
  49.                           102 Molded Stone Place
  50.                        Warner Robins, Georgia 31088
  51.                           Voice: (912) 953-2680
  52.                           Fax:   (912) 953-5517
  53.                           CompuServe: 75206.231
  54.                     The Consultant BBS: (718) 837 3236
  55.  
  56.  
  57.                                      ------
  58.                                      NOTICE
  59.                                      ------
  60.  
  61.  
  62.  
  63. HALCYON IS COPYRIGHTED, ALL RIGHTS RESERVED.  AS SHAREWARE, HALCYON MAY BE
  64. COPIED AND SHARED WITH OTHERS.  HOWEVER, TO PROTECT THE QUALITY OF THE
  65. DISTRIBUTION OF THIS PROGRAM AND TO SUPPORT FUTURE DEVELOPMENT CERTAIN
  66. LIMITATIONS APPLY.  COPIES OF HALCYON MAY BE MADE FOR TRIAL USE BY OTHERS ON
  67. A PRIVATE NON-COMMERCIAL BASIS ONLY.  HALCYON MAY NOT BE RE-SOLD UNDER ANY
  68. CONDITIONS.  AS A REGISTERED USER, YOU MAY DISTRIBUTE COMPILED HALCYON
  69. ROUTINES IN CONNECTION WITH ANY OTHER PRODUCT OR SERVICE.
  70.  
  71. THIS SOFTWARE WILL PERFORM AS DESCRIBED HEREIN ONLY IF PROPERLY APPLIED.
  72. OUR LIABILITY TO YOU IS LIMITED TO REPLACING THE SOFTWARE (FOR REGISTERED
  73. USERS).  WE HAVE NO LIABILITY TO YOU FOR ANY DAMAGE OR LOSS, INCLUDING
  74. SPECIAL, INCIDENTAL, OR CONSEQUENTIAL, CAUSED BY THIS SOFTWARE, DIRECTLY OR
  75. INDIRECTLY.  YOU AGREE TO THE TERMS OF THIS LICENSE BY YOUR DECISION TO USE
  76. THIS SOFTWARE.
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83. Technical support is available through the following sources:
  84.  
  85. ┌─────────────────────────────────────────┬───────────────────────────────┐
  86. │ Mail: Griffin Solutions                 │   Telephone: (912) 953-2680   │
  87. │       102 Molded Stone Place            │   Fax:   (912) 953-5517       │
  88. │       Warner Robins, Georgia 31088, USA │   CompuServe: 75206.231       │
  89. ├─────────────────────────────────────────┴───────────────────────────────┤
  90. │  The Consultant BBS, at 718-837-3236, supporting v32bis/HST at speeds   │
  91. │  from 1200 to 16.8Kbps.  This 4-node ASP-approved BBS features author-  │
  92. │  direct shareware.                                                      │
  93. └─────────────────────────────────────────────────────────────────────────┘
  94.  
  95.  
  96.  
  97.                              Griffin Solutions
  98.                             Basic Documentation
  99.  
  100.                              Table of Contents
  101.  
  102.                                Introduction
  103.  
  104. Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
  105. Shareware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
  106. Getting Started. . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi
  107.    Distribution Files. . . . . . . . . . . . . . . . . . . . . . . . . . vi
  108.    Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
  109.    Creating Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
  110.    Switches and Defines. . . . . . . . . . . . . . . . . . . . . . . . . viii
  111.       Numeric Fields ($N+,E+). . . . . . . . . . . . . . . . . . . . . . viii
  112.       Defining Clipper Indexes . . . . . . . . . . . . . . . . . . . . . ix
  113.    Demonstration . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
  114. Changes to Version 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . x
  115. Order Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
  116.  
  117.            High Level Functions/Procedures Functional Listing
  118.  
  119. Primary Database Handling Routines . . . . . . . . . . . . . . . . . . .  1
  120. File Management Routines . . . . . . . . . . . . . . . . . . . . . . . .  1
  121. dBase Index Handling Routines. . . . . . . . . . . . . . . . . . . . . .  2
  122. dBase Memo Handling Routines . . . . . . . . . . . . . . . . . . . . . .  2
  123. dBase Field Handling Routines. . . . . . . . . . . . . . . . . . . . . .  2
  124. String Handling Routines . . . . . . . . . . . . . . . . . . . . . . . .  3
  125. Date Routines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
  126. Status and Error Reporting Routines. . . . . . . . . . . . . . . . . . .  4
  127. Default Hook Routines. . . . . . . . . . . . . . . . . . . . . . . . . .  4
  128.  
  129.                           Technical Reference
  130.  
  131. AllCaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  132. AssignMemo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  133. Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  134. ALock. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  135. Append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
  136. ClearRecord. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  137. CloseDataBases . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  138. CopyStructure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  139. CopyTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  140. CnvAscToStr. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6
  141. CnvStrToAsc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
  142. CTOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
  143. CurrentArea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
  144. Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  145. DateGet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  146. DateGetN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  147. DatePut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  148. DatePutN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
  149. DBF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  150. DBFError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  151.  
  152.                                       i
  153. Griffin Solutions
  154.  
  155.  
  156. dBOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  157. Deleted. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  158. DeleteRec. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  159. dEOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  160. DTOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  161. DTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  162. Field. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
  163. FieldCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  164. FieldDec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  165. FieldGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  166. FieldGetN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  167. FieldLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  168. FieldNo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  169. FieldPut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  170. FieldPutN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  171. FieldType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  172. FileExist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  173. Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  174. FLock. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  175. FlushDBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  176. Found. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
  177. Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
  178. GoBottom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
  179. GoTop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
  180. Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
  181. IndexOn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
  182. LogicGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
  183. LogicGetN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
  184. LogicPut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
  185. LogicPutN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
  186. MemoClear. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
  187. MemoGet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
  188. MemoGetLine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
  189. MemoGetN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
  190. MemoInsLine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
  191. MemoLines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
  192. MemoPut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
  193. MemoPutN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
  194. MemoWidth. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
  195. NumberGet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  196. NumberGetN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  197. NumberPut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  198. NumberPutN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  199. Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  200. PadL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  201. PadR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  202. RecallRec. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  203. RecCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  204. RecNo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  205. RecSize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
  206. Reindex. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
  207. Replace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
  208.  
  209.  
  210.                                       ii
  211.                                                              Griffin Solutions
  212.  
  213. RLock. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
  214. SaveMemo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
  215. Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
  216. SetCenturyOff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
  217. SetCenturyOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
  218. SetDateStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
  219. SetDBFCacheOff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
  220. SetDBFCacheOn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
  221. SetDeletedOff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
  222. SetDeletedOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
  223. SetErrorCapture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
  224. SetExactOff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  225. SetExactOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  226. SetExclusiveOff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  227. SetExclusiveOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  228. SetFileHandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
  229. SetFilterThru. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
  230. SetFlushOff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
  231. SetFlushOnAppend . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
  232. SetFlushOnWrite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
  233. SetFormulaProcess. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
  234. SetLockOff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
  235. SetLockOn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
  236. SetOrderTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
  237. SetStatusCapture . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
  238. Skip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
  239. SortTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
  240. StrCompare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
  241. StrDate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
  242. StringGet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
  243. StringGetN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
  244. StringPut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
  245. StringPutN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  246. StripChar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  247. Strip_Flip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  248. StrLogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  249. StrNumber. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  250. StrWholeNum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  251. SubStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  252. TrimL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  253. TrimR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  254. Unique_Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  255. UnLock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
  256. UnLockAll. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
  257. Use. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
  258. ValDate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
  259. ValLogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
  260. ValNumber. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
  261. ValWholeNum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
  262. Zap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
  263.  
  264.                                Error Codes
  265.  
  266. Error List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
  267.  
  268.                                      iii
  269. Griffin Solutions
  270.  
  271.  
  272.                          Demonstration Programs
  273.  
  274. DBase File Creator             [GSDMO_01.PAS]. . . . . . . . . . . . . . 38
  275. DBase File Lister              [GSDMO_02.PAS]. . . . . . . . . . . . . . 38
  276. DBase File Formated Lister     [GSDMO_03.PAS]. . . . . . . . . . . . . . 38
  277. DBase File Updating            [GSDMO_04.PAS]. . . . . . . . . . . . . . 39
  278. DBase File Appending           [GSDMO_05.PAS]. . . . . . . . . . . . . . 39
  279. DBase File Indexing            [GSDMO_06.PAS]. . . . . . . . . . . . . . 39
  280. DBase Memo File Lister         [GSDMO_07.PAS]. . . . . . . . . . . . . . 41
  281. DBase File Structure Lister    [GSDMO_08.PAS]. . . . . . . . . . . . . . 41
  282. DBase Index Creator            [GSDMO_09.PAS]. . . . . . . . . . . . . . 41
  283. DBase Multiple Indexes         [GSDMO_10.PAS]. . . . . . . . . . . . . . 42
  284. DBase Relational File Maker    [GSDMO_11.PAS]. . . . . . . . . . . . . . 42
  285. DBase Relational File Linkage  [GSDMO_12.PAS]. . . . . . . . . . . . . . 43
  286. DBase Relational File Linkage  [GSDMO_13.PAS]. . . . . . . . . . . . . . 44
  287. DBase File Maker               [GSDMO_14.PAS]. . . . . . . . . . . . . . 44
  288. DBase File and Memo Builder    [GSDMO_15.PAS]. . . . . . . . . . . . . . 44
  289. DBase File/Memo Editor (Ext)   [GSDMO_16.PAS]. . . . . . . . . . . . . . 44
  290. DBase Status Checker           [GSDMO_17.PAS]. . . . . . . . . . . . . . 45
  291. DBase Error Handler            [GSDMO_18.PAS]. . . . . . . . . . . . . . 46
  292. DBase File Sorting             [GSDMO_19.PAS]. . . . . . . . . . . . . . 47
  293. DBase Reindexing               [GSDMO_20.PAS]. . . . . . . . . . . . . . 47
  294. DBase Copy File & Structure    [GSDMO_21.PAS]. . . . . . . . . . . . . . 47
  295. Getting More Files Open        [GSDMO_22.PAS]. . . . . . . . . . . . . . 47
  296. DBase Filters                  [GSDMO_23.PAS]. . . . . . . . . . . . . . 48
  297. DBase Editor                   [GSDMO_ED.PAS]. . . . . . . . . . . . . . 49
  298. DBase Viewer                   [GSDMO_VU.PAS]. . . . . . . . . . . . . . 49
  299. DBase File Display             [GSDMOTV1.PAS]. . . . . . . . . . . . . . 49
  300. DBase File Display             [GSDMOTV2.PAS]. . . . . . . . . . . . . . 50
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.                                       iv
  327.                                                              Griffin Solutions
  328.  
  329.  
  330.                                  INTRODUCTION
  331.  
  332.  
  333. FEATURES
  334.  
  335. Welcome to HALCYON, a series of Turbo Pascal routines for management of
  336. dBase III and IV files.  The routines are designed to do the following:
  337.  
  338.   - Provide a simple user interface to read and write dBase III and IV
  339. files in a network environment.
  340.  
  341.   - Allow creation, use and updating of multiple dBase .NDX index files in
  342. reading and updating the dBase III and IV data (DBF) files.  The .MDX index
  343. files are not supported (This may change if demand warrants).
  344.  
  345.   - Allow creation, use and updating of multiple Clipper .NTX index files
  346. in reading and updating the dBase III data (DBF) files.
  347.  
  348.   - Allow reading and updating of .DBT memo file entries.
  349.  
  350.   - Allow creation of new dBase III or IV files.  These routines will work
  351. with either dBase III and IV memo file structures.  However, these formats
  352. are not interchangeable.
  353.  
  354.   - Provide expanded routines to display, edit, and update dBase files.
  355.  
  356.   - Provide a file handler interface that provides a simple disk management
  357. capability including file sharing for LANs.
  358.  
  359.   -  Allow operation under all versions of Object Oriented Turbo Pascal,
  360. including Turbo Pascal for Windows.
  361.  
  362.   - Do all of the above using only Turbo Pascal--no assembly routines are
  363. used.
  364.  
  365.   - Apply Object Oriented Programming to create easily usable modules.
  366.  
  367. One significant difference between version 3.0 and previous releases is the
  368. elimination of Griffin Solutions unique window routines.  These were mainly
  369. included to allow demonstration of the routines and were not intended to be
  370. central to the database engine routines.  They have been eliminated to allow
  371. better interface to MicroSoft Windows and Borland TurboVision, as well as
  372. the many commercial, shareware, and public domain windowing packages.  If
  373. there is enough demand, the old window routines will be dusted off, polished
  374. up, and provided as a separate package at minimal cost.
  375.  
  376.  
  377. SHAREWARE
  378.  
  379. HALCYON is copyrighted. It is not a public domain program.  It is being
  380. distributed as Shareware, which means that unmodified copies of the software
  381. and documentation may be freely copied and shared.  I ask in return that
  382.  
  383.  
  384.                                       v
  385. Griffin Solutions
  386.  
  387.  
  388. should you find HALCYON to be useful, you become a registered user.  You
  389. become registered by filling out the order form at the end of this paper
  390. and including a check for $89.95. For your convenience, the order form is
  391. included as a separate file as well (ORDER.FRM).  Alternatively, you may
  392. order online through CompuServe.  Type GO SWREG, and register Software
  393. Registration Number 765.
  394.  
  395. By registering you will get:
  396.  
  397.         o  The right to use the Griffin Solutions routines in your
  398.            programs, including any commercial application.  (This
  399.            right does not extend to distributing the Griffin Solutions
  400.            source code.  However, executable code may be freely dis-
  401.            tributed)
  402.  
  403.         o  A copy of the latest version of the program.
  404.  
  405.         o  Automatic notification of major program updates.
  406.  
  407.         o  Technical support (one year).
  408.  
  409.         o  A printed user's manual.
  410.  
  411. The shareware philosophy is to pay smaller amounts for well-crafted and
  412. useful software from developers who cannot spend the millions of dollars on
  413. marketing necessary to compete with the large software development
  414. companies.  You benefit by being able to try a wider variety of software
  415. products to find the ones that suit your particular purpose. And the trial
  416. is free. The shareware developer benefits from being able to distribute his
  417. work to a wider audience than would be possible through normal channels.
  418.  
  419. Your share of the responsibility for shareware to continue, and to support
  420. the development of more and better products is to distribute your shareware
  421. programs to others and become a registered user of those products you like
  422. and use.
  423.  
  424.  
  425. GETTING STARTED
  426.  
  427. This section will acquaint you with the files on the distribution disk and
  428. show you a demonstration to quickly see what HALCYON can accomplish.
  429.  
  430. Distribution Files
  431.  
  432. The following programs should be on the accompanying disk:
  433.  
  434.  
  435. HALCYON Units:
  436. --------------
  437.                 GS_BUILD.PAS     TPU Builder
  438.                 GSOBSHEL.PAS     Primary user interface to HALCYON
  439.                 GSOB_DBF.PAS     Basic dBase file handling routines
  440.  
  441.  
  442.                                       vi
  443.                                                              Griffin Solutions
  444.  
  445.  
  446.                 GSOB_DBS.PAS     Advanced dBase routines
  447.                 GSOB_DSK.PAS     Disk I/O routines
  448.                 GSOB_DTE.PAS     Date handling routines
  449.                 GSOB_EDT.PAS     Editor routines (non-Windows)
  450.                 GSOB_FLP.PAS     Floating point conversion
  451.                 GSOB_GEN.PAS     Generate test dBase files
  452.                 GSOB_INX.PAS     Virtual table routines
  453.                 GSOB_MMO.PAS     Memo file routines
  454.                 GSOB_NDX.PAS     Index routines (dBase .NDX)
  455.                 GSOB_NTX.PAS     Index routines (Clipper .NTX)
  456.                 GSOB_OBJ.PAS     Basic object structures
  457.                 GSOB_STR.PAS     String handling routines
  458.                 GSOB_VAR.PAS     Global variables
  459.                 GSV_FLDS.PAS     Field handling for TurboVision
  460.                 GSXT_BRO.PAS     File Browser Unit
  461.                 GSXT_SCH.PAS     File Searcher Unit
  462.  
  463. Text Files:
  464. -----------
  465.                 CHANGES .TXT     Latest version changes
  466.                 GS_HELP .ASC     Basic Documentation for HALCYON
  467.                 ORDER   .FRM     Registration Form
  468.                 READ    .ME      Quick introduction file
  469.                 TESTDATA.FIL     Data to construct test files
  470.                 WISDOM  .FIL     Quotes to construct memo records
  471.  
  472.  
  473. Demonstration Files:
  474. --------------------
  475.                 GSDMO_01.PAS     DBase File Creator
  476.                 GSDMO_02.PAS     DBase File Lister
  477.                 GSDMO_03.PAS     DBase File Formated Lister
  478.                 GSDMO_04.PAS     DBase File Updating
  479.                 GSDMO_05.PAS     DBase File Appending
  480.                 GSDMO_06.PAS     DBase File Indexing
  481.                 GSDMO_07.PAS     DBase Memo File Lister
  482.                 GSDMO_08.PAS     DBase File Structure Lister
  483.                 GSDMO_09.PAS     DBase Index Creator
  484.                 GSDMO_10.PAS     DBase Multiple Indexes
  485.                 GSDMO_11.PAS     DBase Relational File Maker
  486.                 GSDMO_12.PAS     DBase Relational File Linkage
  487.                 GSDMO_13.PAS     DBase Relational File Linkage
  488.                 GSDMO_14.PAS     DBase File Maker
  489.                 GSDMO_15.PAS     DBase File and Memo Builder
  490.                 GSDMO_16.PAS     DBase File/Memo Editor (External)
  491.                 GSDMO_17.PAS     DBase Status Checker
  492.                 GSDMO_18.PAS     DBase Error Handler
  493.                 GSDMO_19.PAS     DBase File Sorting
  494.                 GSDMO_20.PAS     DBase Reindexing
  495.                 GSDMO_21.PAS     DBase Copy File and Structure
  496.                 GSDMO_22.PAS     Getting More Files Open
  497.                 GSDMO_23.PAS     DBase Filters
  498.  
  499.  
  500.                                      vii
  501. Griffin Solutions
  502.  
  503. Demonstration Files (Other Than dBase Engine):
  504. ----------------------------------------------
  505.  
  506.                 GSDMO_ED.PAS     DBase Editor
  507.                 GSDMO_VU.PAS     DBase Viewer
  508.                 GSDMOTV1.PAS     DBase File Display
  509.                 GSDMOTV2.PAS     DBase File Display
  510.                 SHOWOFF .EXE     Demonstration program
  511.                 SHOWOFF .PAS     Demonstration program source
  512.                 SMPLSTUF.PAS     Extra screen display routines
  513.                 TESTBROW.PAS     File Browser Demonstration
  514.                 TESTFIND.PAS     Record Finder Demonstration
  515.                 TESTFRM1.PAS     User-assigned Formulas for Indexes (#1)
  516.                 TESTFRM2.PAS     User-assigned Formulas for Indexes (#2)
  517.                 TESTPICK.PAS     Using a Pick List for dBase Records
  518.                 TESTSCH1.PAS     Searching a dBase File for Key Word
  519.                 TESTSCH2.PAS     Searching with Progress Reporting
  520.                 TUTOR1  .DBF     Demonstration sample dBase File
  521.                 XTRASTUF.PAS     Extra dBAse field display routines
  522.  
  523.  
  524. External Editor Files:  (Public domain, used to show external editor call)
  525. ----------------------
  526.  
  527.                 TE      .DOC     TE 2.5 User's Guide (10 pages)
  528.                 TE      .EXE     The actual Text Editor program
  529.                 TEG     .HLP     TE 2.5 Command Summary (1 page)
  530.                 TEMOD   .EXE     Utility to change TE.EXE options
  531.                 TEREAD  .1ST     Information file
  532.  
  533.  
  534.  Installation
  535.  
  536.  Installation consists of copying these files to your hard disk.  The basic
  537.  documentation may be printed by typing 'COPY GS_HELP.ASC PRN' at the DOS
  538.  prompt.  It is formatted for 8.5" X 11" paper and 10-pitch font.
  539.  
  540.  Creating Files
  541.  
  542.  File creation routines are not part of the shell routines.  Although file
  543.  structure creation is very simple, it does require the use of an object.
  544.  An example of how to create a file is demonstrates in GSDMO_14.PAS.
  545.  
  546.  Switches and Defines
  547.  
  548.  Numeric Fields ($N+,E+)
  549.  
  550.  Numeric fields may be read into your program as real values to allow
  551.  them to be used for calculation.  Although the precision of a real value
  552.  is smaller than the extended type (11-12 significant digits vice 19-20
  553.  digits) used in dBase, it is completely sufficient for most applications.
  554.  
  555.  If you need the extra precision of 19-20 digits, these routines will
  556.  adjust automatically.  Routines using real numbers have been modified to
  557.  
  558.                                       viii
  559.                                                                Griffin Solutions
  560.  
  561.  be of type FloatNum.  FloatNum is in unit GSOB_VAR.PAS, and will
  562.  automatically adapt to real or extended type.  To allow numbers to have
  563.  up to 20 significant digits the $N+ and $E+ switches must be set (Alt
  564.  O,C,8,E in the IDE).  Otherwise, 11-12 digits will be used.  The use of
  565.  the $N+,E+ switch adds 10K to program size.  You must rebuild all unit
  566.  TPUs when the option is changed to cause them to be recompiled with the
  567.  new switch settings.
  568.  
  569.  In the command line compiler use the /$N+/$E+ switch settings.  For
  570.  example:
  571.  
  572.             TPC MyProg /$N+/$E+/B
  573.  
  574.  When you compile a program in the $N+,E+ state, the compiler links with
  575.  the full 80x87 emulator.  The resulting .EXE file can be run on any
  576.  machine, regardless of whether that machine has an 80x87. If an 80x87 is
  577.  present, the program will use it; otherwise, the run-time library
  578.  emulates it.  This gives you access to four additional real types:
  579.  Single, Double, Extended, and Comp.  The $E+ directive will emulate the
  580.  80x87. This gives you access to the IEEE floating-point types without
  581.  requiring that you install an 80x87 chip.
  582.  
  583.  Defining Clipper Indexes
  584.  
  585.  Halcyon can handle Clipper index (.NTX) operations.  The unit
  586.  GSOB_NTX.PAS will be substituted for the GSOB_NDX.pas by adding a
  587.  conditional define to the complier options.  In the IDE this is done in
  588.  the Options|Compile menu, selecting Conditional Define, and adding
  589.  CLIPPER as a Define item.  You must then recompile using the
  590.  Compile|Build option to force recompilation of units that will use
  591.  the index.
  592.  
  593.  In the command line compiler use the /D option, for example:
  594.  
  595.       TPC MyProg /DCLIPPER/B
  596.  
  597.  That's the only change necessary to replace .NDX indexes with Clipper
  598.  .NTX indexes.
  599.  
  600.  
  601.  Demonstration
  602.  
  603.  You can run SHOWOFF.EXE to get an immediate feel for the capabilities in
  604.  the HALCYON library of routines.  The source is also included.  This
  605.  program is a data file browser/editor that is very useful for examining the
  606.  data files that are created and modified in the remaining demonstration
  607.  programs.
  608.  
  609.  1.  Execute the program, and look at the screen display.  You have a
  610.      choice of File, Index, Edit, Append, Browse, and Quit.  You must
  611.      select File before any other choice (except Quit) can be selected.
  612.  
  613.  2.  By pressing Return with File highlighted, a directory of all .DBF
  614.      files will be displayed, along with the other directories and drives
  615.  
  616.                                   ix
  617. Griffin Solutions
  618.  
  619.      that may be selected.  Choose a file.  If you don't have any, you
  620.      can use TUTOR1.DBF, included with these files.
  621.  
  622.  3.  Once a file is selected, an existing index (.NDX) file can be chosen
  623.      if it exists.  This is done through the Index selection.
  624.  
  625.  4.  You may now Edit, Append, or Browse the file.  Help information is
  626.      for these functions is available by pressing F1 in the function.
  627.  
  628.  5.  A new file may be opened by returning to the File menu selection.
  629.  
  630.  To get the feeling of the speed and features of HALCYON, run the set of
  631.  demonstration programs starting with GSDMO_01.PAS.  These are described in
  632.  the basic documentation and within the source program itself.
  633.  
  634.  
  635.  CHANGES
  636.  
  637.  Major changes in HALCYON Version 3.0:
  638.  ──────────────────────────────────────
  639.  
  640.       -  A new user interface is included that makes the 'object' part of
  641.  object oriented programming transparent.  The programmer simply uses a
  642.  set of commands similar to the dBase commands to control the file access.
  643.  
  644.       -  The routines work under all versions of Turbo Pascal from 5.5 on
  645.  through 7.0.  The routines work equally well in Turbo Pascal for windows.
  646.  Routines will work in real or protected mode.
  647.  
  648.       -  File sharing is allowed in network environments.
  649.  
  650.       -  More than 15 files can be used at the same time by using a command
  651.  to increase the number of files available.
  652.  
  653.       -  File sorting is allowed.
  654.  
  655.       -  File copying, and copying of the file structure only, is allowed.
  656.  
  657.       -  File filters are permitted by hooking user routines to file reads.
  658.  The user interface required to set up the hook is minimal.
  659.  
  660.       -  Index processing is much faster in version 3.0.
  661.  
  662.       -  Reindexing has been added to simplify Pack operations.  All open
  663.  index files are reindexed automatically upon a call to Reindex.
  664.  
  665.       -  The number of indexes allowed per file is increased to 64.  This
  666.  can be changed by the programmed.
  667.  
  668.       -  The user has the ability to hook status and error reports to take
  669.  whatever actions are needed.
  670.  
  671.       - Routines used for conversion to/from numbers have been modified to
  672.  be of type FloatNum.  This allows up to 20 significant digits.
  673.  
  674.                                       x
  675.                                                              Griffin Solutions
  676.  
  677.  
  678.  
  679.  
  680.  
  681.                             ORDER/REGISTRATION FORM
  682.  
  683.         Quan.        Program               Unit Price         Total
  684.  
  685.         ____         HALCYON  Ver 3.0        $89.95          _______
  686.  
  687.         ____         HALCYON  Ver 3.0        $25.00          _______
  688.                      (Upgrade for Registered Users of)
  689.                      (GS_dBase 2.8 and earlier       )
  690.  
  691.         ____         GS_DBASE Ver 2.9        $25.00          _______
  692.  
  693.  
  694.                      Overseas Shipping        $5.00          _______
  695.  
  696.  
  697.                                             Total:           _______
  698.  
  699.              _____  I have included a check for  :           _______
  700.  
  701.         (Canadians send Canadian POSTAL MONEY ORDER made payable in US $.)
  702.  
  703.  
  704.  
  705.         DISK SIZE (circle one):        5.25" (360K)      3.5"  (720K)
  706.                                        5.25" (1.2M)      3.5"  (1.4M)
  707.  
  708.  
  709.         ** Includes one year free support, current diskette w/manual on disk.
  710.  
  711.         YOUR NAME: ________________________ COMPANY:  _____________________
  712.  
  713.         ADDRESS: __________________________________________________________
  714.  
  715.         CITY: _____________________________ STATE: ____   ZIP: ____________
  716.  
  717.         DAY TIME PHONE (in case of questions):  ___________________________
  718.  
  719.         How did you hear about this program? :  ___________________________
  720.  
  721.                         THANK YOU FOR SUPPORTING SHAREWARE!
  722.  
  723.  
  724.                                  Griffin Solutions
  725.                                102 Molded Stone Place
  726.                             Warner Robins, Georgia 31088
  727.                                 Voice: (912) 953-2680
  728.                                 Fax:   (912) 953-5517
  729.                                  CompuServe 75206.231
  730.                           The Consultant BBS: (718) 837 3236
  731.  
  732.  
  733.                                        xi
  734.                                                                Griffin Solutions
  735.  
  736.  
  737.  
  738.                                Griffin Solutions
  739.                                   High Level
  740.                              Functions/Procedures
  741.  
  742.  
  743.                               Functional Listing
  744.  
  745.  Primary Database Handling Routines:
  746.  
  747.     Function   Alias : string;
  748.     Procedure  Append;
  749.     Procedure  ClearRecord;
  750.     Procedure  CloseDataBases;
  751.     Procedure  CopyStructure(filname : string);
  752.     Procedure  CopyTo(filname : string);
  753.     Function   CurrentArea : byte;
  754.     Function   DBF : string;
  755.     Function   DBFError : integer;
  756.     Function   dBOF : boolean;
  757.     Function   Deleted : boolean;
  758.     Procedure  DeleteRec;
  759.     Function   dEOF : boolean;
  760.     Procedure  Go(n : longint);
  761.     Procedure  GoBottom;
  762.     Procedure  GoTop;
  763.     Procedure  Pack;
  764.     Procedure  RecallRec;
  765.     Function   RecCount : longint;
  766.     Function   RecNo : longint;
  767.     Function   RecSize : word;
  768.     Procedure  Replace;
  769.     Procedure  Select(Obj : byte);
  770.     Procedure  SetDBFCacheOff;
  771.     Procedure  SetDBFCacheOn;
  772.     Procedure  SetDeletedOff;
  773.     Procedure  SetDeletedOn;
  774.     Procedure  SetExactOff;
  775.     Procedure  SetExactOn;
  776.     Procedure  SetFilterThru(UserRoutine : FilterCheck);
  777.     Procedure  SetFormulaProcess(UserRoutine1, UserRoutine2);
  778.     Procedure  Skip(n : longint);
  779.     Procedure  SortTo(filname, formla: string; sortseq: SortStatus);
  780.     Procedure  Use(FName : string);
  781.     Procedure  Zap;
  782.  
  783.  File Management Routines:
  784.  
  785.     Function   ALock : boolean;
  786.     Function   FileExist(FName : string) : boolean;
  787.     Function   FLock : boolean;
  788.  
  789.  
  790.  
  791.  
  792.                                        1
  793.   Griffin Solutions
  794.  
  795.  
  796.     Procedure  FlushDBF;
  797.     Function   RLock : boolean;
  798.     Procedure  SetExclusiveOff;
  799.     Procedure  SetExclusiveOn;
  800.     Procedure  SetFileHandles(hndls : byte);
  801.     Procedure  SetLockOff;
  802.     Procedure  SetLockOn;
  803.     Procedure  SetFlushOff;
  804.     Procedure  SetFlushOnAppend;
  805.     Procedure  SetFlushOnWrite;
  806.     Procedure  Unlock;
  807.     Procedure  UnlockAll;
  808.  
  809.  dBase Index Handling Routines:
  810.  
  811.     Procedure  Find(ss : string);
  812.     Function   Found : boolean;
  813.     Procedure  Index(INames : string);
  814.     Procedure  IndexOn(filname, formla : string);
  815.     Procedure  Reindex;
  816.     Procedure  SetOrderTo(order : integer);
  817.  
  818.  dBase Memo Handling Routines:
  819.  
  820.     Procedure  AssignMemo(st, nm : string);
  821.     Procedure  MemoClear;
  822.     procedure  MemoGet(st : string);
  823.     function   MemoGetLine(linenum : integer) : string;
  824.     procedure  MemoGetN(n : integer);
  825.     Procedure  MemoInsLine(linenum : integer; st : string);
  826.     function   MemoLines : integer;
  827.     procedure  MemoPut(st : string);
  828.     procedure  MemoPutN(n : integer);
  829.     Procedure  MemoWidth(l : integer);
  830.     Procedure  SaveMemo(st, nm : string);
  831.  
  832.  dBase Field Handling Routines:
  833.  
  834.     Function   DateGet(st : string) : longint;
  835.     Function   DateGetN(n : integer) : longint;
  836.     Procedure  DatePut(st : string; jdte : longint);
  837.     Procedure  DatePutN(n : integer; jdte : longint);
  838.     Function   Field(n : byte) : string;
  839.     Function   FieldCount : byte;
  840.     Function   FieldDec(n : byte) : byte;
  841.     Function   FieldGet(fnam : string) : string;
  842.     Function   FieldGetN(fnum : integer) : string;
  843.     Function   FieldLen(n : byte) : byte;
  844.     Function   FieldNo(fn : string) : byte;
  845.     Procedure  FieldPut(fnam, st : string);
  846.  
  847.  
  848.  
  849.  
  850.                                        2
  851.                                                                Griffin Solutions
  852.  
  853.  
  854.     Procedure  FieldPutN(fnum : integer; st : string);
  855.     Function   FieldType(n : byte) : char;
  856.     Function   LogicGet(st : string) : boolean;
  857.     Function   LogicGetN(n : integer) : boolean;
  858.     Procedure  LogicPut(st : string; b : boolean);
  859.     Procedure  LogicPutN(n : integer; b : boolean);
  860.     Function   NumberGet(st : string) : real;
  861.     Function   NumberGetN(n : integer) : real;
  862.     Procedure  NumberPut(st : string; r : real);
  863.     Procedure  NumberPutN(n : integer; r : real);
  864.     Function   StringGet(fnam : string) : string;
  865.     Function   StringGetN(fnum : integer) : string;
  866.     Procedure  StringPut(fnam, st : string);
  867.     Procedure  StringPutN(fnum : integer; st : string);
  868.  
  869.  String Handling Routines:
  870.  
  871.     Function   AllCaps(t : string) : string;
  872.     Procedure  CnvAscToStr(var asc, st; lth : integer);
  873.     Procedure  CnvStrToAsc(var st, asc; lth : integer);
  874.     Function   PadL(strn : string; lth : integer) : string;
  875.     Function   PadR(strn : string; lth : integer) : string;
  876.     Function   StrCompare(var s1,s2) : integer;
  877.     Function   StrDate(jul : longint) : string;
  878.     Function   StrNumber(num : real; lth,dec : integer) : string;
  879.     Function   StrWholeNum(num : longint; lth : integer) : string;
  880.     Function   StrLogic(tf : boolean) : string;
  881.     Function   Strip_Flip(st : string) : string;
  882.     Function   StripChar(ch : Char; st : string) : string;
  883.     Function   SubStr(s : string; b,l : integer) : string;
  884.     Function   TrimL(strn : string):string;
  885.     Function   TrimR(strn : string):string;
  886.     Function   Unique_Field : string;
  887.     Function   ValDate(strn : string) : longint;
  888.     Function   ValNumber(strn : string) : real;
  889.     Function   ValWholeNum(strn : string) : Longint;
  890.     Function   ValLogic(strn : string) : boolean;
  891.  
  892.  Date Routines
  893.  
  894.     Function   CTOD(strn : string) : longint;
  895.     Function   Date: longint;
  896.     Function   DTOC(jul : longint) : string;
  897.     Function   DTOS(jul : longint) : string;
  898.     Procedure  SetCenturyOff;
  899.     Procedure  SetCenturyOn;
  900.     Procedure  SetDateStyle(dt : DateTypes);
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.                                        3
  909.   Griffin Solutions
  910.  
  911.  
  912.  Status and Error Reporting Routines:
  913.  
  914.     Procedure  SetErrorCapture(UserRoutine : CaptureError);
  915.     Procedure  SetStatusCapture(UserRoutine : CaptureStatus);
  916.  
  917.  Default Hook Routines
  918.  
  919.     Procedure  DefCapError(Code, Info : integer);       (SetErrorCapture)
  920.     Procedure  DefCapStatus(stat1,stat2,stat3:longint);  (SetStatusCapture)
  921.     Function   DefFilterCk: boolean;                    (SetFilterThru)
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.                                        4
  967.                                                                Griffin Solutions
  968.  
  969.  
  970.  
  971.                              Technical Reference
  972.  
  973.  
  974.  AllCaps                                                      Unit GSOB_Str
  975.        Function  AllCaps(var t : string) : string;
  976.  
  977.        Function to convert a string to uppercase.  The string to be
  978.        converted is passed as an argument.  A string converted to
  979.        all  uppercase values is returned.
  980.  
  981.  
  982.  AssignMemo                                                   Unit GSOBShel
  983.       Procedure  AssignMemo(st, nm : string);
  984.  
  985.       Reads the memo from field st of the current record of the current
  986.       file and writes it as a text file to file nm.
  987.  
  988.  
  989.  Alias
  990.       Function  Alias: string;                                Unit GSOBShel
  991.  
  992.       Returnd the name of the currently selected database.  This differs
  993.       from DBF() in that only the file name, with no path or extension
  994.       is returned.
  995.  
  996.  
  997.  ALock                                                        Unit GSOBShel
  998.       Function  ALock: boolean;
  999.  
  1000.       Locks a file to prohibit any other user from adding new records while
  1001.       the requesting user appends a record.  Other users can read/write to
  1002.       the rest of the file during this time.
  1003.  
  1004.       If successful, a true will be returned.  If unsuccessful, a false will
  1005.       be returned and the error code will be found by a call to DBFError.
  1006.       If file sharing is not on, the method will return true.
  1007.  
  1008.       This routine uses the "dirty read" method by actually locking a record
  1009.       region over one billion bytes above the actual file location.   Since
  1010.        all Lock calls reference this same offset, other lock requests for
  1011.       the same areas will be rejected, but file reads to the true record loc-
  1012.       ation will be allowed.
  1013.  
  1014.  
  1015.  Append                                                       Unit GSOBShel
  1016.       Procedure  Append;
  1017.  
  1018.       The procedure adds the current record to the end of the current file.
  1019.       If file sharing is on the file will be locked before writing.
  1020.  
  1021.  
  1022.  
  1023.  
  1024.                                        5
  1025.   Griffin Solutions
  1026.  
  1027.  
  1028.  ClearRecord                                                  Unit GSOBShel
  1029.       Procedure  ClearRecord;
  1030.  
  1031.       Sets current record memory buffer to spaces for the length of the
  1032.       record.
  1033.  
  1034.  CloseDataBases                                               Unit GSOBShel
  1035.       Procedure  CloseDataBases;
  1036.  
  1037.       Closes all opened database files from each used area.  The close pro-
  1038.       cedure checks to see if the file was updated, and updates the header
  1039.       information if required.
  1040.  
  1041.  
  1042.  CopyStructure                                                Unit GSOBShel
  1043.       Procedure  CopyStructure(filname: string);
  1044.  
  1045.       Creates an 'empty' dBase file named filname that contains only the
  1046.       structure information from the file (no records) in the current area.
  1047.       This is useful for keeping a copy of the file structure for building
  1048.       a new file.  If a memo file is present, an empty image of it will be
  1049.       copied as well to a DBT file of filname.
  1050.  
  1051.  
  1052.  CopyTo                                                       Unit GSOBShel
  1053.       Procedure  CopyTo(filname: string);
  1054.  
  1055.       Creates a dBase file named filname that is copied from the file in
  1056.       the current area.  Records will only be copied if they are valid
  1057.       (i.e., deleted records are ignored if SetDeletedOn, and SetFilterThru
  1058.       must validate the record as well).  If a memo file is present, it will
  1059.       be copied as well.
  1060.  
  1061.  
  1062.  CnvAscToStr                                                  Unit GSOB_Str
  1063.        Procedure  CnvAscToStr(var asc, st; lth : integer);
  1064.  
  1065.       Procedure to convert a ZASCII string (a string terminated by a null 0)
  1066.       to a Turbo Pascal string in which the first byte contains the length.
  1067.  
  1068.       The asc argument is the ZASCII string to be converted (terminated by
  1069.       a zero).  The st argument is the Turbo Pascal string to hold the
  1070.       converted value.  The lth argument is the maximum length of the string
  1071.       to move.  This should normally  be sizeof(st)-1, to ensure there is no
  1072.       overrun of the Turbo Pascal string size.   Sizeof gets the size of the
  1073.       string, including the length byte.  Therefore, one  must be subtracted
  1074.       to adjust for actual positions available.
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.                                        6
  1083.                                                                Griffin Solutions
  1084.  
  1085.  
  1086.       As a result of the call to this procedure, a string of characters in
  1087.       memory is moved to a Turbo Pascal string variable.  If there is a null
  1088.       (zero) character within the length of the moved string, that position
  1089.       is used to set the string length.  Otherwise, the length of the string
  1090.       is set to the size argument.
  1091.  
  1092.  
  1093.  CnvStrToAsc                                                  Unit GSOB_Str
  1094.       Procedure  CnvStrToAsc(var st, asc; lth : integer);
  1095.  
  1096.       Procedure to convert a Turbo Pascal string in which the first byte
  1097.       contains the string length to a ZASCII string (a string which is
  1098.       terminated by a null (zero).
  1099.       The st argument contains the Turbo Pascal string to convert.  The asc
  1100.       argument is the location to store the converted string (terminated by
  1101.       a zero).  Note that asc must be a memory location where the string is
  1102.       to be actually stored (such as an array), and not a pointer to the
  1103.       location.
  1104.  
  1105.       The lth argument is the maximum length of the string to move.  This
  1106.       should normally be sizeof(asc)-1, to ensure there is no  overrun of the
  1107.       ZASCII string size.  Sizeof gets the maximum size of asc.  Therefore,
  1108.       the programmer must ensure the actual string moved is at least one
  1109.       less, to adjust for actual positions available, and still accomodate
  1110.       a final null byte.
  1111.  
  1112.       As a result of this call, a Turbo Pascal string is moved to a series of
  1113.       consecutive locations in memory.  A null (zero) character is inserted
  1114.       as the final byte to create a ZASCII string.
  1115.  
  1116.  
  1117.  CTOD                                                         Unit GSOBShel
  1118.       Function  CTOD(strn : string) : longint;
  1119.  
  1120.       Function returns a Julian date as a longint value.  The input value
  1121.       is a string in MM/DD/YY, MM/DD/YYYY, or YYYYMMDD format.  The date in
  1122.       numeric Julian Date value will be returned.  If the date in the
  1123.       string field is invalid, less than 3 Mar 0000 or greater than
  1124.       31 Dec  65536, a -1 will be returned.
  1125.  
  1126.  
  1127.  CurrentArea                                                  Unit GSOBShel
  1128.       Function  CurrentArea: byte;
  1129.  
  1130.       Returns the number of the currently selected work area assigned by
  1131.       Select.
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.                                        7
  1141.   Griffin Solutions
  1142.  
  1143.  
  1144.  Date                                                         Unit GSOBShel
  1145.       Function  Date : longint;
  1146.  
  1147.       Function returns the current date through a system DOS call. The
  1148.       value returned will be a numeric longint value representing the
  1149.       Julian date value.
  1150.  
  1151.  
  1152.  DateGet                                                      Unit GSOBShel
  1153.       Function  DateGet(st : string) : longint;
  1154.  
  1155.       Function method that returns the date from a record date field. The
  1156.       value returned will be a numeric longint value representing the Julian
  1157.       Date.  St is the string containing the field name for the field
  1158.       desired.
  1159.  
  1160.       The date in numeric Julian Date will be returned. If the date in the
  1161.       dBase field is invalid, less than 3 March 0000, or greater than 31
  1162.       December 65536, a -1 will be returned.
  1163.  
  1164.  DateGetN                                                     Unit GSOBShel
  1165.       Function     DateGetN(n: integer): longint;
  1166.  
  1167.       Returns a julian date value from the field number n.  The value
  1168.       returned is the same as in DateGet.  However, DateGetN does not confirm
  1169.       the field is a valid date field before retrieving the value.  If a
  1170.       valid date was not contained in the field, a 0 will be returned.
  1171.  
  1172.  
  1173.  DatePut                                                      Unit GSOBShel
  1174.       Procedure  DatePut(st : string; jdte : longint);
  1175.  
  1176.       Procedure method that stores a date value in a record field.  The value
  1177.       stored will be in numeric Julian Date format.  It will be converted to
  1178.       the character string YYYYMMDD to be stored in the dBase record.
  1179.       St is the string containing the field name for the field desired. Jdte
  1180.       is a longint Julian Date format to be converted and stored in the
  1181.       record field.  The date in YYYYMMDD format will be stored in the
  1182.       current record in the specified field.
  1183.  
  1184.  
  1185.  DatePutN                                                     Unit GSOBShel
  1186.       Procedure    DatePutN(n: integer; jdte: longint);
  1187.  
  1188.       Converts and stores a date value jdte in field number n.  The value
  1189.        stored is the same as in DatePut.  However, DatePutN does not confirm
  1190.       the field is a valid date field before storing the value.  If the field
  1191.       was not a valid date field, the value stored will be truncated or
  1192.       expanded  to fit.
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.                                        8
  1199.                                                                Griffin Solutions
  1200.  
  1201.  
  1202.  DBF                                                          Unit GSOBShel
  1203.       Function  DBF: string
  1204.  
  1205.  
  1206.       Returns the full path name of the current database.
  1207.  
  1208.  
  1209.  DBFError                                                     Unit GSOBShel
  1210.       Function  DBFError: integer;
  1211.  
  1212.       Returns the error code generated by the last file I/O request for
  1213.       the current database.
  1214.  
  1215.  
  1216.  dBOF                                                         Unit GSOBShel
  1217.       Function  dBOF: boolean;
  1218.  
  1219.       Returns the flag set when a file read attempt is less than record
  1220.       number 1.  for example, the following code will read a file from the
  1221.       last record to the first:
  1222.  
  1223.                   GoBottom;
  1224.                   while not dBOF do
  1225.                   begin
  1226.                          .
  1227.                      Skip(-1);
  1228.                   end;
  1229.  
  1230.  
  1231.  Deleted                                                      Unit GSOBShel
  1232.       Function   Deleted: boolean;
  1233.  
  1234.       Returns true if the current record's deletion status is true, false
  1235.       otherwise.
  1236.  
  1237.  
  1238.  DeleteRec                                                    Unit GSOBShel
  1239.       Procedure  DeleteRec;
  1240.  
  1241.       Procedure sets the deleted flag in the current record, and writes the
  1242.       record to disk.  The deleted flag is the first byte of the record, and
  1243.       is an ASCII space (' ') for not deleted and an ASCII asterisk ('*') for
  1244.       a deleted record.
  1245.  
  1246.       This procedure does not physically remove the record from the file.
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.                                        9
  1257.   Griffin Solutions
  1258.  
  1259.  
  1260.  dEOF                                                         Unit GSOBShel
  1261.       Function  dEOF: boolean;
  1262.  
  1263.       Returns the Boolean flag set true when a file read command would be
  1264.       beyond the end of the file.  Used to test for the end of the file.
  1265.  
  1266.       Example:
  1267.                 GoTop;
  1268.                While not dEOF do
  1269.                begin
  1270.  
  1271.                           .
  1272.                           .
  1273.                   Skip(1);
  1274.                end;
  1275.  
  1276.  
  1277.  DTOC                                                         Unit GSOBShel
  1278.       Function  DTOC(jul : longint) : string;
  1279.  
  1280.       Function that returns a string value in a viewable format (MM/DD/YY
  1281.       or MM/DD/YYYY) based on the Julian Date provided.  The number of
  1282.       characters that will be in the year position is determined by the
  1283.       status of SetCenturyOn/Off (Off for YY, On for YYYY).
  1284.  
  1285.       The argument passed to the function is a longint variable containing
  1286.       a Julian Date value.  The return value will contain the string date
  1287.       in MM/DD/YY or MM/DD/YYYY.  If the passed value is invalid '  /  /  '
  1288.       will be returned.
  1289.  
  1290.  
  1291.  DTOS                                                         Unit GSOBShel
  1292.       Function  DTOS(jul : longint) : string;
  1293.  
  1294.       Function that returns a string value in dBase storage format (YYYYMMDD)
  1295.       based on the Julian Date provided.
  1296.  
  1297.       The argument passed is a longint variable containing a Julian Date
  1298.       value.   The  date in YYYYMMDD will be returned.  A blank field will
  1299.       be returned if the input value is invalid.
  1300.  
  1301.  
  1302.  Field                                                        Unit GSOBShel
  1303.       Function  Field(n : byte): string;
  1304.  
  1305.       Function returns a string holding the name of the field in  the dBase
  1306.       record located at position n, in the range [1..number of fields].
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.                                        10
  1315.                                                                Griffin Solutions
  1316.  
  1317.  
  1318.  FieldCount                                                   Unit GSOBShel
  1319.       Function  FieldCount: byte;
  1320.  
  1321.       Returns number of field descriptors in the current file.
  1322.  
  1323.  
  1324.  FieldDec                                                     Unit GSOBShel
  1325.       Function  FieldDec(n : byte): byte;
  1326.  
  1327.       Function returns the number of decimal positions of the field in the
  1328.       dBase field located at position n, where n is in the range of
  1329.       [1..number of fields].
  1330.  
  1331.  
  1332.  FieldGet                                                     Unit GSOBShel
  1333.       Function FieldGet(fnam : string) : string;
  1334.  
  1335.       Function that returns the contents in the current record of the
  1336.       field name passed as fnam.  That means that character values will have
  1337.       trailing spaces to fill the width of the field.  Numeric fields will
  1338.       have leading spaces.  Date fields will be in the stored format of
  1339.       YYYYMMDD, and a memo field will return the record number (with leading
  1340.       spaces) pointing to where a memo record is stored in the memo file.
  1341.  
  1342.       To specify the field to retrieve, just put its name in the function
  1343.       argument.
  1344.  
  1345.       Example:   Assuming a field named LASTNAME in the DBF record,
  1346.                  the following will return the contents of the field in
  1347.                  NewString:
  1348.  
  1349.                  NewString := FieldGet('LASTNAME');
  1350.  
  1351.       By the way, lower case letters could be used for 'lastname', or any
  1352.        combination.  The function will set it to upper case for the field
  1353.       search.
  1354.  
  1355.       If an invalid field name is passed as an argument, the function will
  1356.       return an empty string (length zero), which is a dead giveaway that you
  1357.       goofed.  Any valid field returned has a width greater than zero.
  1358.  
  1359.  
  1360.  FieldGetN
  1361.                                                               Unit GSOBShel
  1362.       Function     FieldGetN(fnum: integer): string;
  1363.  
  1364.       Returns the contents of the field at field position fnum.  The rules of
  1365.       how the value is structured are the same as for FieldGet.
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.                                        11
  1373.   Griffin Solutions
  1374.  
  1375.  
  1376.  FieldLen                                                     Unit GSOBShel
  1377.       Function  FieldLen(n : byte): byte;
  1378.  
  1379.       Function returns the length of the field in the dBase record located
  1380.       at position n, where n is in the range [1..number of fields].
  1381.  
  1382.  
  1383.  FieldNo                                                      Unit GSOBShel
  1384.       Function  FieldNo(fn : string): byte;
  1385.  
  1386.       Function returns the field number of the field named fn in the dBase
  1387.       record.  If fn is not a valid field name, 0 will be returned.
  1388.  
  1389.  
  1390.  FieldPut                                                     Unit GSOBShel
  1391.       Procedure  FieldPut(fnam, st : string);
  1392.  
  1393.       Stores a value in a record field.
  1394.  
  1395.       fnam is the string containing the field name for the field desired.
  1396.       St is a string variable containing the data to be stored in the record
  1397.       field.  Field data in character format will be stored in the current
  1398.       record field.  St will be forced to the length of the  field.
  1399.  
  1400.       Example:   assuming a field named FIELD1 in the DBF record, the fol-
  1401.                  lowing will store the contents of NewString in the field:
  1402.  
  1403.                  FieldPut('field1',NewString);
  1404.  
  1405.  
  1406.  FieldPutN                                                    Unit GSOBShel
  1407.       Procedure    FieldPutN(fnum: integer; st: string);
  1408.  
  1409.       Stores string st in field fnum.  The action is the same as in FieldPut.
  1410.  
  1411.  
  1412.  FieldType                                                    Unit GSOBShel
  1413.       Function  FieldType(n : byte): char;
  1414.  
  1415.       Function returns a character holding the type of the field in the dBase
  1416.       record located at position n, where n is in [1..number of fields].
  1417.  
  1418.  
  1419.  FileExist                                                    Unit GSOBShel
  1420.       Function  FileExist(FName : string): boolean;
  1421.  
  1422.       Function tests for the existence of file FName and returns true if it
  1423.       exists.  FName must contain the filename and extension.  If the file
  1424.       is not in the current directory you must give the complete path.
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.                                        12
  1431.                                                                Griffin Solutions
  1432.  
  1433.  
  1434.  Find                                                         Unit GSOBShel
  1435.       Procedure  Find(ss : string);
  1436.  
  1437.       Searches an indexed database file for the first record with an
  1438.       index key matching the specified character string.  Returns a
  1439.       boolean TRUE in function Found if the record is found.
  1440.  
  1441.  
  1442.  
  1443.  FLock                                                        Unit GSOBShel
  1444.       Function    FLock: boolean;
  1445.  
  1446.       Locks a file to prohibit any other user from writing records while
  1447.       the requesting user controls the file.  Other users can read the
  1448.       file during this time.
  1449.  
  1450.       If successful, a true will be returned.  If unsuccessful, a  false will
  1451.       be returned and the error code will be found by a call to DBFError.
  1452.       If file sharing is not on, the method will return true.
  1453.  
  1454.       This routine uses the "dirty read" method by actually locking a record
  1455.       region over one billion bytes above the actual file location.   Since
  1456.       all Lock calls reference this same offset, other lock requests for
  1457.       the same areas will be rejected, but file reads to the true record loc-
  1458.       ation will be allowed.
  1459.  
  1460.  
  1461.  FlushDBF                                                     Unit GSOBShel
  1462.       Procedure  FlushDBF;
  1463.  
  1464.       Flushes the current file to disk and updates directory information.
  1465.       The FlushDBF routine eliminates most lost data situations.  For
  1466.       example, if FlushDBF is not used and a program has written to a file,
  1467.       and the program or computer crashes unexpectedly before the program
  1468.       gets around to closing the file, the most recently written data does
  1469.       not get written to disk (because it is being temporarily saved in
  1470.       memory buffers by DOS), and the file length in the directory entry does
  1471.       not get updated.  FlushDBF will also work on networks (such as Novel
  1472.       and 3-COM) that will not update directories using the normal DOS Flush
  1473.       function.
  1474.  
  1475.       This only needs to be used if automatic flush is off (SetFlushOff).  If
  1476.       SetFlushOnAppend or SetFlushOnWrite is on, flushing will be automatic.
  1477.  
  1478.  
  1479.  Found                                                        Unit GSOBShel
  1480.       Function  Found: boolean;
  1481.  
  1482.       Returns true when a record key match is found during a call Find.
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.                                        13
  1489.   Griffin Solutions
  1490.  
  1491.  
  1492.  Go                                                           Unit GSOBShel
  1493.       Procedure  Go(n : LongInt);
  1494.  
  1495.       Read a record from a dBase file.  N is the record number to be read.
  1496.  
  1497.       If available, the requested record will be loaded into the current
  1498.       buffer and the Deleted Flag will be set if the record is deleted.
  1499.       If the record was beyond the end of the file, the File_EOF will be set.
  1500.       If the access was for a record less than physical record 1, the
  1501.       File_TOF will be set to indicate the record was before the top of the
  1502.       file.  These flags can be checked through dBOF and dEOF.
  1503.  
  1504.  
  1505.  
  1506.  GoBottom                                                     Unit GSOBShel
  1507.       Procedure  GoBottom;
  1508.  
  1509.       Read the last record in the current file into the current record
  1510.       buffer.  If an index is open, the master index file will be used to
  1511.       access the record.
  1512.  
  1513.  
  1514.  GoTop                                                        Unit GSOBShel
  1515.       Procedure  GoTop;
  1516.  
  1517.       Read the first record in the current file into the current record
  1518.       buffer.  If an index is open, the master index file will be used to
  1519.       access the record.
  1520.  
  1521.  
  1522.  Index                                                        Unit GSOBShel
  1523.       Procedure  Index(INames : string);
  1524.  
  1525.       Sets an index to a dBase file. IName will consist of the index
  1526.       file name(s), without the file extension.  Up to 16 indexes may
  1527.       be included, separated by commas. The first index is used as the
  1528.        master index.  All calls that read or write records will ensure
  1529.       the index master is used for reads, and that all indexes are
  1530.       updated on writes.  The master index may be changed by a call to
  1531.       SetOrderTo.
  1532.  
  1533.  
  1534.  IndexOn                                                      Unit GSOBShel
  1535.       Procedure  IndexOn(filname, formla : string);
  1536.  
  1537.       Creates an index file from the active database file.  The key
  1538.       fields are ordered alphabetically, chronologically, or
  1539.       numerically.
  1540.  
  1541.  
  1542.  
  1543.  
  1544.  
  1545.  
  1546.                                        14
  1547.                                                                Griffin Solutions
  1548.  
  1549.  
  1550.       filname is a string (without extension) to assign as a file name
  1551.       for the index.
  1552.  
  1553.       formla is a string holding the field(s) to be used to make the
  1554.       index key.  An index formula can have multiple fields for the
  1555.       index expression.  For example:
  1556.  
  1557.                IndexON('MyIndex','LASTNAME + FIRSTNAME');
  1558.  
  1559.       will create an index with a key expression indexed on a combined
  1560.       field of LASTNAME and FIRSTNAME.
  1561.  
  1562.  
  1563.  LogicGet                                                     Unit GSOBShel
  1564.       Function  LogicGet(st : string) : boolean;
  1565.  
  1566.       Function method that returns the boolean value from a record logical
  1567.       field.  St is the string containing the field name for the field
  1568.       desired.
  1569.  
  1570.  
  1571.  LogicGetN                                                    Unit GSOBShel
  1572.       Function  LogicGetN(n: integer): boolean;
  1573.  
  1574.       Returns boolean value for the field at position n,  If n is not in the
  1575.       range of valid fields, a false is returned.  The field is  not checked
  1576.       to ensure it is of type L.
  1577.  
  1578.  
  1579.  LogicPut                                                     Unit GSOBShel
  1580.       Procedure  LogicPut(st : string; b : boolean);
  1581.  
  1582.       Procedure method that stores a logic value in a record field.  The
  1583.       value stored will be 'T' or 'F' depending on the boolean value passed.
  1584.  
  1585.       St is the string containing the field name for the field desired. The
  1586.       argument b is a boolean variable containing the logical condition to be
  1587.       converted and stored in the record field.  The boolean value will be
  1588.       converted to 'T' or 'F' and stored in the current record in the
  1589.       specified field.
  1590.  
  1591.  
  1592.  LogicPutN                                                    Unit GSOBShel
  1593.       Procedure    LogicPutN(n: integer; b: boolean);
  1594.  
  1595.       Converts boolean value b and stores it in field n.  Method used is
  1596.       described in LogicPut method.  This method does nor check to ensure
  1597.       this is a field of type L.
  1598.  
  1599.  
  1600.  
  1601.  
  1602.  
  1603.  
  1604.                                        15
  1605.   Griffin Solutions
  1606.  
  1607.  
  1608.  LUpdate                                                    Unit GSOBShel
  1609.       Function     LUpdate: string;
  1610.  
  1611.       Returns the date of the last update of the file in the current
  1612.       file area.  If the file area is not in use, a blank value
  1613.       will be returned.
  1614.  
  1615.       LUpdate() returns the date in the form mm/dd/yy.  This format
  1616.       can be modified with SetDateCenturyOn, SetDateCenturyOff, and
  1617.       SetDateStyle.
  1618.  
  1619.  
  1620.  MemoClear                                                    Unit GSOBShel
  1621.       Procedure  MemoClear;
  1622.  
  1623.       Creates an empty memo record in memory by eraseing all text lines
  1624.       stored in the MemoCollect object and releasing text memory allocated
  1625.       on the heap.  Normally called by MemoGet before reading a new memo
  1626.       record.
  1627.  
  1628.  
  1629.  MemoGet                                                      Unit GSOBShel
  1630.       Procedure  MemoGet(st : string);
  1631.  
  1632.       Procedure that loads the memo field into memory.  The field will
  1633.       be stored into formatted lines.  St is the string containing the memo
  1634.       field name.  If field st is not a memo field then an error will occur.
  1635.       The memo field data is loaded into memory.  It may be retrieved with
  1636.       MemoGetLine.  Lines of text are built and stored in a MemoCollect
  1637.       object.  Word wrap is invoked and uses the length in Edit_Lgth to
  1638.       determine the maximum line allowed.  The value of Edit_Lgth may be
  1639.       changed with MemoWidth.  When Edit_Lgth characters are counted without
  1640.       a hard line return, the routine searches for the logical place to break
  1641.       the line, stores that part of the line in the line collection along
  1642.       with a soft return ($8D), and starts a new count.  When a hard line
  1643.       return ($0D) is encountered, the current line count characters are
  1644.       stored in the line collection with a hard return.
  1645.  
  1646.  
  1647.  
  1648.  MemoGetLine                                                  Unit GSOBShel
  1649.       Function    MemoGetLine(linenum: integer): string;
  1650.  
  1651.       The method returns the text contained at line linenum from the
  1652.       MemoCollect line collection.  If linenum is invalid, an empty string
  1653.       will be returned.  Note that linenum values are relative 0, with
  1654.       linenum = 0 being the first line available.
  1655.  
  1656.  
  1657.  
  1658.  
  1659.  
  1660.  
  1661.  
  1662.                                        16
  1663.                                                                Griffin Solutions
  1664.  
  1665.  
  1666.  MemoGetN                                                     Unit GSOBShel
  1667.       Procedure  MemoGetN(n : integer);
  1668.  
  1669.       Procedure that loads the memo field n into memory.  If field n is not
  1670.       a memo field then an error will occur.  The action is the same as in
  1671.       MemoGet.
  1672.  
  1673.  
  1674.  MemoInsLine                                                  Unit GSOBShel
  1675.       Procedure   MemoInsLine(linenum: integer; st: string);
  1676.  
  1677.       Insert text st in the MemoCollect line collection at line linenum.
  1678.       Linenum is in the range [1..MemoLines].  If linenum is <= 0 then the
  1679.       line will be inserted at the end of the current collection.  If
  1680.       linenum > MemoLines then no action will be taken.
  1681.  
  1682.  
  1683.  MemoLines                                                    Unit GSOBShel
  1684.       Function    MemoLines: integer;
  1685.  
  1686.       Returns the number of memo text lines contained in the current memo
  1687.       collection.
  1688.  
  1689.  
  1690.  MemoPut                                                      Unit GSOBShel
  1691.       Procedure  MemoPut(st : string);
  1692.  
  1693.       This Function will write the current memo record in memory to the memo
  1694.       file and return with the starting memo block inserted in the dBase memo
  1695.       field st of the DBF record.  If field st is not a memo field then an
  1696.       error will occur.  The actual DBF record is not updated by MemoPut.
  1697.       The following code shows how the DBF record can be updated for each
  1698.       MemoPut if needed:
  1699.  
  1700.           procedure CollectionToMemo;
  1701.           var
  1702.              m1,
  1703.              m2  : string[10];
  1704.           begin
  1705.              m1 := FieldGet('COMMENTS');     {Get old memo file block}
  1706.              MemoPut('COMMENTS');
  1707.              m2 := FieldGet('COMMENTS');     {Get new memo file block}
  1708.                 {If the memo field number has changed, save the DBF record}
  1709.              if m1 <> m2 then Replace;
  1710.           end;
  1711.  
  1712.  
  1713.  MemoPutN                                                     Unit GSOBShel
  1714.       Procedure  MemoPutN(n : integer);
  1715.  
  1716.       Stores the memo record for field n.  If field n is not a memo field
  1717.       then an error will occur.  The action is the same as in MemoPut.
  1718.  
  1719.  
  1720.                                        17
  1721.   Griffin Solutions
  1722.  
  1723.  
  1724.  MemoWidth                                                    Unit GSOBShel
  1725.       Procedure   MemoWidth(l: integer);
  1726.  
  1727.       Sets Edit_Lgth to length l.  This length is used for word wrap
  1728.       calculations.  A current memo record will not be changed by this call.
  1729.  
  1730.       The new width will only take effect with the next call to MemoGet.
  1731.       The default length is 70 characters.
  1732.  
  1733.  
  1734.  NumberGet                                                    Unit GSOBShel
  1735.       Function  NumberGet(st : string) : real;
  1736.  
  1737.       Function method that returns the value in a record field.  The value
  1738.       returned will be the numeric value of the field in the dBase record. St
  1739.       is the string containing the field name for the field desired. This
  1740.       will return a type real variable containing the converted record field
  1741.       data.
  1742.  
  1743.       If the value in the field is not a valid number, a 0 will be returned.
  1744.  
  1745.  
  1746.  NumberGetN                                                   Unit GSOBShel
  1747.       Function     NumberGetN(n: integer): real;
  1748.  
  1749.       Returns a real number from field n.  If the value in the field is not a
  1750.       valid number, a 0 will be returned.  No field type checking is done to
  1751.       ensure the field is a numeric field.
  1752.  
  1753.  
  1754.  NumberPut                                                    Unit GSOBShel
  1755.       Procedure  NumberPut(st : string; r : real);
  1756.  
  1757.       Procedure method that stores a numeric value in a record field.  The
  1758.       value stored will converted to a character string using the length and
  1759.       decimal places specified for the field.
  1760.  
  1761.       St is the string containing the field name for the field desired. The
  1762.       argument r is a real variable containing the number to be converted and
  1763.       stored in the record field.  The numeric value will be converted to a
  1764.       character value of the length and decimal places required by the field
  1765.       descriptor and stored in the current record in the specified field.
  1766.  
  1767.  
  1768.  NumberPutN                                                   Unit GSOBShel
  1769.       Procedure    NumberPutN(n: integer; r: real);
  1770.  
  1771.       Converts a number r to string and stores it in field n.  No field type
  1772.  
  1773.       checking is done.  The method used for conversion is described in
  1774.       NumberPut.
  1775.  
  1776.  
  1777.  
  1778.                                        18
  1779.                                                                Griffin Solutions
  1780.  
  1781.  
  1782.  Pack                                                         Unit GSOBShel
  1783.       Procedure  Pack;
  1784.  
  1785.       Physically removes records marked for deletion from the active data-
  1786.       base file in the current work area.
  1787.  
  1788.  
  1789.  PadL                                                         Unit GSOB_Str
  1790.       Function  PadL(strn: string; lth: integer): string;
  1791.  
  1792.       Function to return a string that takes the input string (strn), and
  1793.       creates a new string of length lth.  Leading spaces will be inserted
  1794.       if necessary to create the new string.  If lth is less than the length
  1795.       of strn, the new string will be truncated to length lth by deleting
  1796.       leading characters.
  1797.  
  1798.  
  1799.  PadR                                                         Unit GSOB_Str
  1800.       Function  PadR(strn: string; lth: integer): string;
  1801.  
  1802.       Function to return a string that takes the input string (strn), and
  1803.       creates a new string of length lth.  Trailing spaces will be inserted
  1804.       if necessary to create the new string.  If lth is less than the length
  1805.       of strn, the new string will be truncated to length lth by deleting
  1806.       trailing characters.
  1807.  
  1808.  
  1809.  RecallRec                                                    Unit GSOBShel
  1810.       Procedure  RecallRec;
  1811.  
  1812.       Procedure clears the deleted flag in the current record, and writes the
  1813.        record to disk.  The deleted flag is the first byte of the record, and
  1814.       is an ASCII space (' ') for not deleted and an ASCII asterisk ('*') for
  1815.       a deleted record.
  1816.  
  1817.  
  1818.  RecCount                                                     Unit GSOBShel
  1819.       Function  RecCount: longint;
  1820.  
  1821.       Returns the number of records in the current file, including all
  1822.       deleted records.
  1823.  
  1824.  
  1825.  RecNo                                                        Unit GSOBShel
  1826.       Function  RecNo: longint;
  1827.  
  1828.       Returns the number of the current record in the current file.
  1829.  
  1830.  
  1831.  RecSize                                                      Unit GSOBShel
  1832.       Function  RecSize: word;
  1833.  
  1834.       Returns the length of each dBase record in the current file.
  1835.  
  1836.                                        19
  1837.   Griffin Solutions
  1838.  
  1839.  Reindex                                                      Unit GSOBShel
  1840.       Procedure  Reindex;
  1841.  
  1842.       Rebuilds all index files associated with the dBase file in the current
  1843.       area.
  1844.  
  1845.  
  1846.  Replace                                                      Unit GSOBShel
  1847.       Procedure  Replace;
  1848.  
  1849.       The Replace procedure will write the record memory buffer to the current
  1850.       record on disk.
  1851.  
  1852.       If file sharing is on, the record will be locked before writing.  If
  1853.       indexes are opened, they will be updated if the value in the index's
  1854.       key expression changes.
  1855.  
  1856.  
  1857.  RLock                                                        Unit GSOBShel
  1858.       Function   RLock: boolean;
  1859.  
  1860.       Locks the current record (RecNumber) to prohibit any other user from
  1861.       writing to the record while the requesting user controls it.  Other
  1862.       users can read the record during this time.
  1863.  
  1864.       If successful, a true will be returned.  If unsuccessful, a false will
  1865.       be returned and the error code will be found by a call to DBFError.
  1866.       If file sharing is not on, the method will return true.
  1867.  
  1868.       This routine uses the "dirty read" method by actually locking a record
  1869.       region over one billion bytes above the actual file location.   Since
  1870.       all Lock calls reference this same offset, other lock requests for
  1871.       the same areas will be rejected, but file reads to the true record loc-
  1872.       ation will be allowed.
  1873.  
  1874.  
  1875.  SaveMemo                                                     Unit GSOBShel
  1876.       Procedure  SaveMemo(st, nm : string);
  1877.  
  1878.       Reads the text file nm and stores it in the memo record for field st of
  1879.       the current record in the current file.  Both the DBT and the DBF file
  1880.       will be updated to reflect the new memo record.
  1881.  
  1882.  
  1883.  Select                                                       Unit GSOBShel
  1884.       Procedure  Select(Obj : byte);
  1885.  
  1886.       Chooses a work area in which to open a database file, or selects
  1887.       a work area in which a database file is already open.  The valid
  1888.       work areas are 1 through 40.
  1889.  
  1890.  
  1891.  
  1892.  
  1893.                                        20
  1894.                                                                Griffin Solutions
  1895.  
  1896.  
  1897.  SetCenturyOff
  1898.                                                               Unit  GSOBShel
  1899.       Procedure  SetCenturyOff;
  1900.  
  1901.       Resets the GS_Date_Century in GSOB_DTE to prevent the century from
  1902.       being displayed in viewable dates.  For example, dates are presented as
  1903.       MM/DD/YY (02/25/92).
  1904.  
  1905.  
  1906.  SetCenturyOn                                                 Unit GSOBShel
  1907.       Procedure  SetCenturyOn;
  1908.  
  1909.       Sets the GS_Date_Century in GSOB_DTE to allow the century to be
  1910.       displayed in viewable dates.  For example, dates are presented as
  1911.       MM/DD/YYYY (02/25/1992).
  1912.  
  1913.  
  1914.  
  1915.  SetDateStyle                                                 Unit GSOBShel
  1916.       Procedure  SetDateStyle(dt : DateTypes);
  1917.  
  1918.       Determines the format for the date displays.  The default setting is
  1919.       American.  The avaliable settings are:
  1920.  
  1921.                American (or MDY)             mm/dd/yy
  1922.                ANSI                          yy.mm.dd
  1923.                British or French (or DMY)    dd/mm/yy
  1924.                German                        dd.mm.yy
  1925.                Italian                       dd-mm-yy
  1926.                Japan (or YMD)                yy/mm/dd
  1927.                USA                           mm-dd-yy
  1928.  
  1929.       For example:  SetDateStyle(Italian) will cause the date to be
  1930.                     returned as dd-mm-yy after a call to DTOC.
  1931.  
  1932.          The valid settings are in the set DateTypes:
  1933.  
  1934.              DateTypes = (American,ANSI,British,French,German,Italian,
  1935.                           Japan, USA, MDY, DMY, YMD);
  1936.  
  1937.  
  1938.  
  1939.  SetDBFCacheOff                                               Unit GSOBShel
  1940.       Procedure SetDBFCacheOff;
  1941.  
  1942.       Turns off the cache disk read for DBF files.  This is the default
  1943.       mode.
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.                                        21
  1952.   Griffin Solutions
  1953.  
  1954.  
  1955.  SetDBFCacheOn                                                Unit GSOBShel
  1956.       Procedure SetDBFCacheOn;
  1957.  
  1958.       Turns on a 32K cache to speed disk read for DBF files.  This is use-
  1959.       ful for fast sequential reads.  However, this will slow random disk
  1960.       reads when used for an index.  For this reason, the cache will be
  1961.       turned off whenever an index is opened.  If an index is open when
  1962.       SetDBFCacheOn is called, the request for cache will be ignored.
  1963.  
  1964.  
  1965.  SetDeletedOff                                                Unit GSOBShel
  1966.       Procedure SetDeletedOff;
  1967.  
  1968.       Allows deleted records to be read instead of ignored for positional
  1969.       record access commands (e.g., GoTop, GoBottom, Skip()).
  1970.  
  1971.  
  1972.  SetDeletedOn                                                 Unit GSOBShel
  1973.       Procedure  SetDeletedOn;
  1974.  
  1975.       Causes deleted records to be ignored.  This is only valid for posi-
  1976.       tional record access commands (e.g., GoTop, GoBottom, Skip()).  For
  1977.       physical record access (e.g., Go(104)), the record will be read regard-
  1978.       less of the deletion flag.
  1979.  
  1980.  
  1981.  SetErrorCapture                                              Unit GSOBShel
  1982.       Procedure  SetErrorCapture(UserRoutine : CaptureError);
  1983.  
  1984.       Assigns a user-supplied routine to process run error information.
  1985.       A 'hook' is available to allow the user to gain access to the runtime
  1986.       errors generated by Griffin Solutions objects.  The default procedure
  1987.       DefCapError halts the program using RunError.  If the user chooses to
  1988.        take advantage of error capture to allow graceful recovery or shutdown,
  1989.       it is done by replacing DefCapError with his or her own routines via
  1990.       SetErrorCapture.
  1991.  
  1992.       The following is an example of inserting a user-supplied error
  1993.       handling procedure:
  1994.                               Procedure must use Far calls!!!
  1995.          {F+}   <--------------------------------------------
  1996.          Procedure UserErrorCheck(Code, Info : integer);
  1997.          begin
  1998.             Writeln(Code,' ',Info);
  1999.          end;
  2000.          {F-}
  2001.                        .
  2002.                        .
  2003.          SetErrorCapture(UserErrorCheck);
  2004.  
  2005.  
  2006.  
  2007.  
  2008.  
  2009.                                        22
  2010.                                                                Griffin Solutions
  2011.  
  2012.  
  2013.       To return to the default, simply use:
  2014.  
  2015.          SetErrorCapture(DefCapError);
  2016.  
  2017.       Note that the assigned procedure must use far calls {$F+}.
  2018.  
  2019.       Constants passed as arguments are contained in the GSOB_VAR unit.
  2020.       The User supplied program must process the error using Code as the
  2021.       run error code.  Info provides additional information about the error.
  2022.  
  2023.  
  2024.  SetExactOff                                                  Unit GSOBShel
  2025.       Procedure  SetExactOff;
  2026.  
  2027.       Forces routines that compare dBase field values to match based on the
  2028.       length of the search string only.  For example, SetExactOff will report
  2029.       string 'ABC' as equal to a field containing 'ABCDEF'.
  2030.  
  2031.  
  2032.  SetExactOn                                                   Unit GSOBShel
  2033.       Procedure  SetExactOn;
  2034.  
  2035.       Forces routines that compare dBase field values to have an exact match
  2036.       to be equal.  For example, SetExactOn require comparison routines to
  2037.       report string 'ABC' as not equal to a field containing 'ABCDEF'.
  2038.  
  2039.  
  2040.  SetExclusiveOff                                              Unit GSOBShel
  2041.       Procedure  SetExclusiveOff;
  2042.  
  2043.       Allows other users to share files.  This is the default if file
  2044.       sharing is available.
  2045.  
  2046.  
  2047.  SetExclusiveOn                                               Unit GSOBShel
  2048.       Procedure  SetExclusiveOff;
  2049.  
  2050.       Allows a user to open a file on a multiuser system for exclusive
  2051.       use, so that no other user can have access to that file.
  2052.  
  2053.  
  2054.  SetFileHandles                                               Unit GSOBShel
  2055.       Procedure  SetFileHandles(hndls: byte);
  2056.  
  2057.       MS-DOS only allows up to 15 user files to be open at the same time for
  2058.       a single program.  This Routine allows you to have 255 files open
  2059.       simultaneously under DOS 3.0 or higher.  The function should be called
  2060.       at the very start of the  program to ensure no more than the standard
  2061.       handles are opened before the handle table is extended to the number
  2062.       of handles specified in hndls.  The value in hndls must be at least 5
  2063.  
  2064.  
  2065.  
  2066.  
  2067.                                        23
  2068.   Griffin Solutions
  2069.  
  2070.  
  2071.       greater than the number of user files required to account for the
  2072.       standard files.
  2073.  
  2074.       You must edit your CONFIG.SYS file (see the DOS manual for details),
  2075.       so that it includes a line that says "FILES=XXX".  XXX should be a
  2076.       number that is at least 3 greater than the maximum number of files
  2077.       that will be in use (opened by  RESET, REWRITE or APPEND) at the same
  2078.       time during the execution of your program  (larger values will provide
  2079.       no additional benefit, with respect to your  individual program), and
  2080.       should not exceed 255.  Under any version of DOS, the  minimum allow-
  2081.       able value for XXX is 8.  Then, reboot your computer so that the
  2082.       FILES=XXX parameter takes hold.  This same change to the CONFIG.SYS
  2083.       file will have to be made on any machine in which your program is to
  2084.       run.
  2085.  
  2086.  SetFilterThru                                                Unit GSOBShel
  2087.       Procedure  SetFilterThru(UserRoutine : FilterCheck);
  2088.  
  2089.       Assigns a user-supplied routine to filter each record and report if
  2090.       the record passes the filter test.  This is done by replacing the
  2091.       default DefFilterCk with his or her own routine via a call to
  2092.       SetFilterThru.
  2093.  
  2094.       The Griffin Solutions routines will use this to find the next record
  2095.       to be read and returned in the current record buffer.  A filter check
  2096.       is done on all relative reads (e.g., GoBottom, GoTop, Skip()).
  2097.       Physical record reads do not get filtered (e.g., Go(123)).
  2098.  
  2099.       The following is an example of inserting a user-supplied record filter
  2100.       testing function for names starting with 'A'-'L':
  2101.  
  2102.                               Procedure must use Far calls!!!
  2103.          {F+}   <--------------------------------------------
  2104.          Function FilterName: boolean;
  2105.          var
  2106.             b : boolean;
  2107.             n : string;
  2108.          begin
  2109.             n := FieldGet('LASTNAME');
  2110.             b := n < 'M';
  2111.             FilterName := b;
  2112.          end;
  2113.          {$F-}                   {End Far Calls}
  2114.                    .
  2115.          SetFilterThru(FilterName);
  2116.  
  2117.       To return to the default, simply use:
  2118.  
  2119.         SetFilterThru(DefFilterCk);
  2120.  
  2121.  
  2122.  
  2123.  
  2124.  
  2125.                                        24
  2126.                                                                Griffin Solutions
  2127.  
  2128.  
  2129.       Note that the assigned procedure must use far calls {$F+}.  Also
  2130.       note that SetFilterThru should not be called until a file  has been
  2131.       assigned to the selected file area through Use.  If no file has
  2132.       been assigned, Error 1008, Object is not initialized in file area,
  2133.       will halt the program.
  2134.  
  2135.  
  2136.  SetFlushOff                                                  Unit GSOBShel
  2137.       Procedure  SetFlushOff;
  2138.  
  2139.       Turns off automatic file flushing.  This is the default setting.
  2140.       If automatic flushing is needed, use either the SetFlushOnAppend or
  2141.       SetFlushOnWrite.  The FlushDBF procedure can be used if automatic
  2142.       flushing is not wanted.
  2143.  
  2144.  
  2145.  SetFlushOnAppend                                             Unit GSOBShel
  2146.       Procedure  SetFlushOnAppend;
  2147.  
  2148.       Flushes the current file to disk and updates directory information
  2149.       when a record is appended to the current file.  This ensures the
  2150.       correct file size is always contained in the DOS directory table.
  2151.       This saves time over SetFlushOnWrite since on every write can really
  2152.       slow write-intensive applications.
  2153.  
  2154.  
  2155.  SetFlushOnWrite                                              Unit GSOBShel
  2156.       Procedure  SetFlushOnWrite;
  2157.  
  2158.       Flushes the current file to disk and updates directory information
  2159.       when a record is written to the current file.  This ensures the
  2160.       file is current and the correct file size is always contained in the
  2161.       DOS directory table.  However, this slows processing in applications
  2162.       that are write-intensive.  For these applications, SetFlushOnAppend
  2163.       may be a better choice.
  2164.  
  2165.  
  2166.  SetFormulaProcess                                           Unit GSOBShel
  2167.       Procedure  SetFormulaProcess(UserRoutine1 : FormulaProc;
  2168.                                    UserRoutine2: XtractFunc);
  2169.  
  2170.       Assigns two user-supplied routines to process formulas to be built
  2171.       and used by index files.  This call replaces the default routines
  2172.       DefFormulaBuild and DefFormulaXtract with the programmer's own
  2173.       routine via a call to SetFormulaProcess.
  2174.  
  2175.       The Formula routine in HALCYON only handles straight field names.
  2176.       However, the SetFormulaProcess allows a user-supplied routine to be
  2177.       called anytime a formula is needed for an index action from anywhere
  2178.       within the ancestor object(s).
  2179.  
  2180.       Two routines must be provided.  UserRoutine1 is a routine that
  2181.       parses the expression and translates into parameters are understood
  2182.  
  2183.                                       25
  2184. Griffin Solutions
  2185.  
  2186.       by UserRoutine2.  UserRoutine2 is called every time a index key is
  2187.       to be extracted from a record.
  2188.  
  2189.       In this example, substrings of the first five positions of the
  2190.       LASTNAME and FIRSTNAME fields are combined in a string that is then
  2191.       returned as the formula's result.
  2192.  
  2193.       The IndexOn command must contain the correct formula;
  2194.       For example:
  2195.  
  2196.          IndexOn('DEMOFRM2','SUBSTR(LASTNAME,1,5)+SUBSTR(FIRSTNAME,1,5)');
  2197.  
  2198.       so it will be stored properly in the index header for use by other
  2199.       programs such as dBase, FoxPro, Clipper, etc.
  2200.  
  2201.  
  2202.              ($F+)
  2203.              Function UFormula(st:string;var fmrec:GSR_FormRec): boolean;
  2204.              var FldCnt : integer;
  2205.              begin
  2206.                 if (fmrec.FAlias = 'TESTFRM2') then  (Correct Index?)
  2207.                 begin                                (set extract table)
  2208.                    UFormula := true;
  2209.                    for FldCnt := 0 to 32 do fmrec.FPosn[FldCnt] := 0;
  2210.                    fmrec.FType := 'C';  (Character key)
  2211.                    fmrec.FDcml := 0;
  2212.                    fmrec.FSize := 10; (5 chars from LASTNAME & FIRSTNAME)
  2213.                 end
  2214.                 else UFormula := true;
  2215.              end;
  2216.               Function UFormXtract(var st:string;fmrec:GSR_FormRec):boolean;
  2217.              begin
  2218.                 if (fmrec.FAlias = 'TESTFRM2') then    (Correct index?)
  2219.                 begin
  2220.                    UFormXtract := true;
  2221.                    st := SubStr(FieldGet('LASTNAME'),1,5) +
  2222.                    SubStr(FieldGet('FIRSTNAME'),1,5);
  2223.                 end
  2224.                 else UFormXtract := false;
  2225.              end;
  2226.              ($F-)
  2227.                                   .
  2228.                                   .
  2229.                                   .
  2230.             Select(1);
  2231.             Use('GSDMO_01');
  2232.             SetFormulaProcess(UFormula, UFormXtract);
  2233.                                   .
  2234.                                   .
  2235.  
  2236.             To return to the default, simply use:
  2237.             SetFormulaProcess(DefFormulaBuild, DefFormulaXtract);
  2238.  
  2239.  
  2240.  
  2241.                                       26
  2242.                                                              Griffin Solutions
  2243.  
  2244.       Note that the assigned procedure must use far calls ($F+).  Also
  2245.       note that SetFormulaProcess should not be called until a file has
  2246.       been assigned to the selected file area through Use.  If no file
  2247.       has been assigned, Error 1008, Object is not initialized in file
  2248.       area, will halt the program.
  2249.  
  2250. SetLockOff                                                   Unit GSOBShel
  2251.      Procedure  SetLockOff;
  2252.  
  2253.      Disables automatic file locking.  The user must use ALock, FLock,
  2254.      RLock, and Unlock commands to lock/unlock files.
  2255.  
  2256.  
  2257.  
  2258. SetLockOn                                                    Unit GSOBShel
  2259.      Procedure  SetLockOn;
  2260.  
  2261.      Enables automatic file locking when records are written, to maintain
  2262.      the database integrity during updates.  Still allows ALock, FLock,
  2263.  
  2264.  
  2265.  
  2266.      RLock, and Unlock commands to lock/unlock files.  This is the default
  2267.      mode.
  2268.  
  2269.  
  2270. SetOrderTo                                                   Unit GSOBShel
  2271.      Procedure  SetOrderTo(order : integer);
  2272.  
  2273.      Establishes the master index when more than one is available.  For
  2274.      example:
  2275.  
  2276.              Index('Indx1, Indx2, Indx3');
  2277.              SetOrderTo(3);
  2278.  
  2279.      will make Indx3 the master index, used for all file reads.
  2280.  
  2281.  
  2282. SetStatusCapture                                             Unit GSOBShel
  2283.      Procedure  SetStatusCapture(UserRoutine : CaptureStatus);
  2284.  
  2285.      Assigns a user-supplied routine to process status information.  Several
  2286.      functions in HALCYON can take some time to complete (e.g., IndexOn
  2287.      and Pack).  For this reason, a 'hook' is available to allow the user
  2288.      to gain access and track progress.  The default procedure DefCapStatus
  2289.      ignores the status.  If the user chooses to take advantage of progress
  2290.      reporting, it is done by replacing DefCapStatus with his or her own
  2291.       routines via SetStatusCapture.  The status may be ignored again later
  2292.      by reseting the default via SetCaptureStatus(DefCapStatus).
  2293.  
  2294.      The following is an example of inserting a user-supplied status
  2295.      reporting procedure:
  2296.  
  2297.  
  2298.  
  2299.                                       27
  2300. Griffin Solutions
  2301.  
  2302.                              Procedure must use Far calls!!!
  2303.         {F+}   <--------------------------------------------
  2304.         Procedure UserStatusUpdate(stat1,stat2,stat3 : longint);
  2305.         begin
  2306.            Writeln(stat1,' ',stat2,' ',stat3);
  2307.         end;
  2308.         {F-}
  2309.                                       .
  2310.                                       .
  2311.         SetStatusCapture(UserStatusUpdate);
  2312.  
  2313.      To return to the default, simply use:
  2314.  
  2315.         SetStatusCapture(DefCapStatus);
  2316.  
  2317.      Note that the assigned procedure must use far calls {$F+}.
  2318.      Constants passed as arguments are contained in the GSOB_VAR unit,
  2319.      they are:
  2320.  
  2321.  
  2322.  
  2323.  
  2324.  
  2325.  
  2326.        StatusStart     = -1;   Passed to indicate a routine will be passing
  2327.                                status update information in the future.
  2328.        StatusStop      = 0;    Signals termination by a routine, cancelling
  2329.                                status update processing.
  2330.        StatusIndexTo   = 1;    Token for identifying IndexTo as the routine
  2331.                                passing status information during sort phase.
  2332.        StatusIndexWr   = 2;    Token for identifying IndexTo as the routine
  2333.                                passing status information during write phase.
  2334.        StatusSort      = 5;    Token for identifying Sort as the routine
  2335.                                passing status information.
  2336.        StatusCopy      = 6;    Token for identifying Copy as the routine
  2337.                                passing status information during file writing.
  2338.        StatusPack      = 11;   Token for identifying Pack as the routine
  2339.                                passing status information.
  2340.        GenFStatus      = 901;  Token for file record creation  report.
  2341.  
  2342.      The structure of a StatusUpdate call is:
  2343.  
  2344.        StatusUpdate(statword1, statword2, statword3);
  2345.  
  2346.        where the statword* values are type longint and will vary depending on
  2347.        the contents of statword1.  For example:
  2348.  
  2349.        if     statword1 = StatusStart
  2350.        then:  statword2 = the calling routine token (e.g., StatusIndexTo,
  2351.                           StatusPack).
  2352.               statword3 = the number of records to be processed.
  2353.  
  2354.  
  2355.  
  2356.  
  2357.                                       28
  2358.                                                              Griffin Solutions
  2359.  
  2360.        if     statword1 = StatusStop
  2361.        then:  statword2 = 0
  2362.               statword3 = 0
  2363.  
  2364.        if      statword1 = StatusCopy/StatusIndexTo/StatusPack/StatusSort
  2365.        then:   statword2 = current record number being processed
  2366.                statword3 = 0
  2367.  
  2368.        if      statword1 = StatusIndexWr
  2369.        then:   statword2 = current record number being processed
  2370.                statword3 = Pass number
  2371.  
  2372.  
  2373. Skip                                                         Unit GSOBShel
  2374.      Procedure  Skip(n : longint);
  2375.  
  2376.      Causes the active database file to move a specified number of
  2377.      records and read the new record.  A positive n will move from
  2378.      the current record position toward the end of the file.  A
  2379.      negative n will move toward the beginning of the file.  A value
  2380.      of zero will reread the current record.
  2381.  
  2382.  
  2383.      If the Skip would be beyond the end of the file the last record
  2384.      in the file will be read and the End of File flag will be set.
  2385.      If the Skip is negative and would be before the beginning of the
  2386.      file, the first record in the file is read and the Top of File
  2387.      flag is set true.
  2388.  
  2389.      If the file is indexed, Skip follows the Index order.
  2390.  
  2391.  
  2392. SortTo                                                       Unit GSOB_Str
  2393.      Procedure  SortTo(filname, formla: string; sortseq: SortStatus);
  2394.  
  2395.      Creates a dBase file named filname that is sorted on the expression
  2396.      in formla.  Sortseq determines the direction of the sort.  Valid
  2397.      arguments for sortseq are SortUp, SortDown, and NoSort.  NoSort will
  2398.      give a copy of the current file unsorted.  With SetDeletedOn, all
  2399.      deleted records will be ignored and not written to the new file.  If
  2400.      a memo file is present, it will be copied as well.
  2401.  
  2402.      Formla is a string holding the field(s) to be used to make the
  2403.      index key.  An index formula can have multiple fields for the
  2404.      index expression.  For example:
  2405.  
  2406.               SortTo('MyFile','LASTNAME + FIRSTNAME');
  2407.  
  2408.      will create a dBase file sequenced on a combined field of LASTNAME
  2409.      and FIRSTNAME.
  2410.  
  2411.      An opened file cannot be used as the destination name for the sorted
  2412.      file.  A runtime error 1007 will occur if the file is already opened.
  2413.  
  2414.  
  2415.                                       29
  2416. Griffin Solutions
  2417.  
  2418. StrCompare                                                   Unit GSOB_Str
  2419.      Function StrCompare(var s1,s2): integer;
  2420.  
  2421.      Function compares two strings, s1 and s2.  The return integer will
  2422.      contain one of the following values:
  2423.  
  2424.            -1 if s1 is less than s2
  2425.             0 if s1 equals s2
  2426.             1 if s1 is greater than s2
  2427.  
  2428.  
  2429. StrDate                                                      Unit GSOB_Str
  2430.      Function  StrDate(jul : longint) : string;
  2431.  
  2432.      Function to convert a longint Julian Date to a formatted date field
  2433.      (MM/DD/YY or MM/DD/YYYY).  The number of characters that will be in
  2434.      the year position is determined by the status of GS_Date_Century in
  2435.      unit GSOB_Dte (False for YY, true for  YYYY).  A blank string will be
  2436.      returned if the passed argument is invalid.
  2437.  
  2438.  
  2439. StringGet                                                    Unit GSOBShel
  2440.      Function  StringGet(fnam: string) : string;
  2441.  
  2442.      Function method that returns the value in a record field.  The value 
  2443.      returned will be the character string as it is stored in the dBase
  2444.      record.  Fnam is the string containing the field name for the field
  2445.      desired.
  2446.  
  2447.      StringGet returns a string formatted based on the field type.  A 
  2448.      character field is returned with trailing spaces removed, numeric 
  2449.      values with leading spaces removed, date fields formatted as MM/DD/YY,
  2450.      and memo fields as "---memo---" if the memo field is not used or
  2451.      "---MEMO---" if the memo contains data.  Note with this, it is possible
  2452.      to have an empty string (length zero) if a character field is blank.
  2453.      
  2454.  
  2455. StringGetN                                                   Unit GSOBShel
  2456.      Function  StringGetN(fnum: integer): string;
  2457.  
  2458.      Retrieves a string from field fnum, using the same rules as StringGet.
  2459.  
  2460.  
  2461. StringPut                                                    Unit GSOBShel
  2462.      Procedure  StringPut(fnam, st : string);
  2463.  
  2464.      Procedure method that stores a string value in a record field.
  2465.      
  2466.      Fnam is the string containing the field name for the field  desired.  St
  2467.      is a string variable containing the string to be stored in the record
  2468.      field.  The string value will be stored in the current record in the
  2469.      specified field, properly padded with spaces to fit.
  2470.  
  2471.  
  2472.  
  2473.                                       30
  2474.                                                              Griffin Solutions
  2475.  
  2476. StringPutN                                                   Unit GSOBShel
  2477.      Procedure    StringPutN(fnum: integer; st: string);
  2478.  
  2479.      Places string st in field fnum using the same technique as StringPut.
  2480.  
  2481.  
  2482. StripChar                                                    Unit GSOB_Str
  2483.      Procedure  StripChar(ch : Char; var st : string);
  2484.  
  2485.      This procedure will remove all instances of the character ch from the
  2486.      string st.  With st = 'one&two&three', a procedure call of
  2487.      StripChar('&',st) would return with st = 'onetwothree'.  This procedure
  2488.      is also useful for removing embedded spaces in a string.
  2489.  
  2490.  
  2491. Strip_Flip                                                   Unit GSOB_Str
  2492.      Function  Strip_Flip(st : string) : string;
  2493.  
  2494.      This function will remove trailing spaces and move any part of the
  2495.      string that is preceeded by a '~' to the end of the string.  For
  2496.      example:  "Smith~John X." will be converted to "John X. Smith" on
  2497.      return.
  2498.  
  2499.      St is the string to be converted.  Trailing spaces are deleted and
  2500.      any part of the string preceeded by a "~" is flipped to the end of
  2501.      the string.
  2502.  
  2503.  
  2504. StrLogic                                                     Unit GSOB_Str
  2505.      Function  StrLogic(tf : boolean) : string;
  2506.  
  2507.       Function to convert a boolean value to a string containing 'T' or 'F'.
  2508.  
  2509.      The tf argument is the boolean value to be converted. A string holding
  2510.      'T' or 'F' is returned, based on tf being true for 'T' and false for
  2511.      'F'.
  2512.  
  2513.  
  2514. StrNumber                                                    Unit GSOB_Str
  2515.      Function  StrNumber(num : real; lth,dec : integer) : string;
  2516.  
  2517.      Function to convert a numeric real value to a string.
  2518.  
  2519.      Argument num is the numeric type real value to be converted.  Lth is
  2520.      the integer length to use for the string.  Dec is the integer value
  2521.      for number of decimal places.  A string holding the numeric value is
  2522.      returned.
  2523.  
  2524.  
  2525. StrWholeNum                                                  Unit GSOB_Str
  2526.      Function  StrWholeNum(num : longint; lth : integer) : string;
  2527.  
  2528.      Function to convert a numeric integer value to a string.
  2529.  
  2530.  
  2531.                                       31
  2532. Griffin Solutions
  2533.  
  2534.      Num is the numeric type longint value to be converted.  Lth is the
  2535.      integer length to use for the string.  A string holding the numeric
  2536.      value is returned.
  2537.  
  2538.  
  2539. SubStr                                                       Unit GSOB_Str
  2540.      Function  SubStr(s : string; b,l : integer) : string;
  2541.  
  2542.      Function to return a substring from a string.  As a function, this will
  2543.      allow the user to use the routine directly in other arguments such as
  2544.      write statements.
  2545.  
  2546.      S is the string from which the substring is to be extracted, b is the
  2547.      integer number for the starting location within the string, and l is
  2548.      the integer number of positions to extract.  A string holding the
  2549.      substring value is returned.
  2550.  
  2551.  
  2552. TrimL                                                        Unit GSOB_Str
  2553.      Function  TrimL(strn : string):string;
  2554.  
  2555.      Function to remove leading spaces from a string.
  2556.  
  2557.      Strn is the string to be converted.  A string with all leading spaces
  2558.      removed is returned.
  2559.  
  2560.  
  2561. TrimR                                                        Unit GSOB_Str
  2562.      Function  TrimR(strn : string):string;
  2563.  
  2564.      Function to remove trailing spaces from a string.
  2565.  
  2566.      Strn is the string to be converted.  A string with all trailing
  2567.      spaces removed is returned.
  2568.  
  2569.  
  2570. Unique_Field                                                 Unit GSOB_Str
  2571.      Function  Unique_Field : string;
  2572.  
  2573.      Function to return an eight-character unique string.  This is useful
  2574.      to make a one-of-a-kind data name as a unique key or file name.  A
  2575.      primary purpose of this function is to create a unique linking name
  2576.      between related files where no  other data record is assured of being
  2577.      unique.  For example, in a family tree file, there may be several
  2578.      people with the same name.  By adding a unique key when a new name
  2579.      is entered, you may be assured of "uniqueness" of record identifiers
  2580.      for related files, such as spouse or parent files.
  2581.  
  2582.  
  2583. UnLock                                                       Unit GSOBShel
  2584.      Procedure   UnLock;
  2585.  
  2586.      This method releases the file area previously locked.  If multiple
  2587.  
  2588.  
  2589.                                       32
  2590.                                                              Griffin Solutions
  2591.  
  2592.      calls to lock the same region have been nested (for example, the
  2593.      programmer called RLock and the record was also automatically locked
  2594.      during Replace, only the UnLock to release the original lock will
  2595.      actually unlock the record.  This will clear any locks on related
  2596.      files, such as index and memo files as well.  Unlock only applies
  2597.      to the current file area.  Use UnlockAll to release locks on all
  2598.      files in all areas.
  2599.  
  2600.      There is no effect if this method is called when no record is locked or
  2601.      file sharing is not on.
  2602.  
  2603.  
  2604. UnLockAll                                                    Unit GSOBShel
  2605.      Procedure   UnLockAll;
  2606.  
  2607.      This method releases all file locks in all areas.
  2608.  
  2609.      There is no effect if this method is called when no record is locked or
  2610.      file sharing is not on.
  2611.  
  2612.  
  2613. Use                                                          Unit GSOBShel
  2614.      Procedure  Use(FName : string);
  2615.  
  2616.      Assigns and opens a dBase file to the current area.  FName is the name
  2617.      of the dBase file without the .DBF extension.
  2618.  
  2619.  
  2620. ValDate                                                      Unit GSOB_Str
  2621.      Function  ValDate(strn : string) : longint;
  2622.  
  2623.      Function to convert a string date field (MM/DD/YY, MM/DD/YYYY, or
  2624.      YYYYMMDD) to a longint Julian Date.
  2625.  
  2626.      Strn is the string holding the date in MM/DD/YY, MM/DD/YYYY, or
  2627.      YYYYMMDD format.  The date in numeric Julian Date value will be
  2628.      returned.  
  2629.  
  2630.      If the date in the string field is invalid, blank, less than 
  2631.      3 Mar 0000 or greater than 31 Dec 65536, a 0 will be returned.
  2632.  
  2633.      Note the difference between this and the -1 returned by GS_Date_Juln.
  2634.      A zero is returned to maintain consistency with an all-blank  date
  2635.      field in a dBase record.
  2636.  
  2637.  
  2638. ValLogic                                                     Unit GSOB_Str
  2639.      Function  ValLogic(strn : string) : boolean;
  2640.  
  2641.      Function to convert string to a boolean value.
  2642.  
  2643.      Strn is the string holding a character to be converted.  If the
  2644.      OldLogic value is "T","t","Y", or "y", bool is set true, else bool
  2645.      is set false.
  2646.  
  2647.                                       33
  2648. Griffin Solutions
  2649.  
  2650. ValNumber                                                    Unit GSOB_Str
  2651.      Function  ValNumber(strn : string) : real;
  2652.  
  2653.      Function to convert a string to a numeric value.
  2654.  
  2655.      Strn is the string to convert.  A numeric value is returned which is
  2656.      the string's value.  If the string is invalid, a zero is returned.
  2657.  
  2658.  
  2659. ValWholeNum                                                  Unit GSOB_Str
  2660.      Function  ValWholeNum(strn : string) : Longint;
  2661.  
  2662.      Function to convert a string to a numeric integer value.
  2663.  
  2664.      Strn is the string to convert.  A numeric value is returned which is
  2665.      the string's value.  If the string is invalid, a zero is returned.
  2666.  
  2667.  
  2668. Zap                                                          Unit GSOBShel
  2669.      Procedure  Zap;
  2670.  
  2671.      Removes all records from the active database file.
  2672.  
  2673.      Any open index files in the current work area are automatically
  2674.      reindexed to reflect the empty database file.
  2675.  
  2676.  
  2677.  
  2678.  
  2679.  
  2680.  
  2681.  
  2682.  
  2683.  
  2684.  
  2685.  
  2686.  
  2687.  
  2688.  
  2689.  
  2690.  
  2691.  
  2692.  
  2693.  
  2694.  
  2695.  
  2696.  
  2697.  
  2698.  
  2699.  
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.                                       34
  2706.                                                              Griffin Solutions
  2707.  
  2708.  
  2709.  
  2710.  
  2711.                                 Error Codes
  2712.  
  2713.  
  2714.    dosInvalidFunct   =    1;         {Invalid function number}
  2715.    dosFileNotFound   =    2;         {File not found}
  2716.    dosPathNotFound   =    3;         {Path not found}
  2717.    dosTooManyFiles   =    4;         {Too many open files}
  2718.    dosAccessDenied   =    5;         {File access denied}
  2719.    dosInvalidHandle  =    6;         {Invalid file handle}
  2720.    dosInvalidAccess  =   12;         {Invalid file access code}
  2721.    dosInvalidDrive   =   15;         {Invalid drive number}
  2722.    dosCantRemoveDir  =   16;         {Cannot remove current directory}
  2723.    dosCantRename     =   17;         {Cannot rename across drives}
  2724.    dosLockViolated   =   33;         {Attempted to read locked disk}
  2725.    dosDiskReadError  =  100;         {Disk read error}
  2726.    dosDiskWriteError =  101;         {Disk write error}
  2727.    dosFileNotAssgd   =  102;         {File not assigned}
  2728.    dosFileNotOpen    =  103;         {File not open}
  2729.    dosNotOpenInput   =  104;         {File not open for input}
  2730.    dosNotOpenOutput  =  105;         {File not open for output}
  2731.    dosInvalidNumber  =  106;         {Invalid numeric format}
  2732.    dosWriteProtected =  150;         {Disk is write-protected}
  2733.    dosBadStructure   =  151;         {Bad drive request struct length}
  2734.    dosDriveNotReady  =  152;         {Drive not ready}
  2735.    dosDataCRCError   =  154;         {CRC error in data}
  2736.    dosDiskSeekError  =  156;         {Disk seek error}
  2737.    dosMediaUnknown   =  157;         {Unknown media type}
  2738.    dosSectorNotFound =  158;         {Sector Not Found}
  2739.    dosPrinterNoPaper =  159;         {Printer out of paper}
  2740.    dosWriteFault     =  160;         {Device write fault}
  2741.    dosReadFault      =  161;         {Device read fault}
  2742.    dosHardwareFail   =  162;         {Hardware failure}
  2743.    tpDivideByZero    =  200;         {Division by zero}
  2744.    tpRangeCheck      =  201;         {Range check error}
  2745.    tpStackOverflow   =  202;         {Stack overflow error}
  2746.    tpHeapOverflow    =  203;         {Heap overflow error}
  2747.    tpInvalidPointer  =  204;         {Invalid pointer operation}
  2748.    tpFloatPointOflow =  205;         {Floating point overflow}
  2749.    tpFloatPointUFlow =  206;         {Floating point underflow}
  2750.    tpFloatPointInvld =  207;         {Invalid floating point operation}
  2751.    tpNoOverlayMngr   =  208;         {Overlay manager not installed}
  2752.    tpOverlayReadErr  =  209;         {Overlay file read error}
  2753.    tpObjectNotInit   =  210;         {Object not initialized}
  2754.    tpAbstractCall    =  211;         {Call to abstract method}
  2755.    tpStreamRegError  =  212;         {Stream registration error}
  2756.    tpCollectionIndex =  213;         {Collection index out of range}
  2757.    tpCollectionOFlow =  214;         {Collection overflow error}
  2758.    gsBadDBFHeader    = 1001;         {dBase DBF file header invalid}
  2759.  
  2760.  
  2761.  
  2762.  
  2763.                                       35
  2764. Griffin Solutions
  2765.  
  2766.  
  2767.    gsDBFRangeError   = 1002;         {dBase record request beyond EOF}
  2768.    gsInvalidField    = 1003;         {dBase field name is invalid}
  2769.    gsBadFieldType    = 1004;         {dBase field is of incorrect type}
  2770.    gsBadDBTRecord    = 1005;         {dBase memo record has format error}
  2771.    gsBadFormula      = 1006;         {Formula expression cannot be translated}
  2772.    gsFileAlreadyOpen = 1007;         {Dest file for sort or copy already open}
  2773.    gsAreaIsNotInUse  = 1008;         {Object is not initialized in file area}
  2774.  
  2775.    {               Extended Run Time Error Code Information             }
  2776.  
  2777.                              {GSOB_DSK errors}
  2778.    dskAddToFileError = 1112;         {Error in GSO_DiskFile.AddToFile}
  2779.    dskCloseError     = 1103;         {Error in GSO_DiskFile.Close}
  2780.    dskEraseError     = 1104;         {Error in GSO_DiskFile.Erase}
  2781.    dskFileSizeError  = 1105;         {Error in GSO_DiskFile.FileSize}
  2782.    dskFlushError     = 1111;         {Error in GSO_DiskFile.Flush}
  2783.    dskReadError      = 1101;         {Error in GSO_DiskFile.Read}
  2784.    dskRenameError    = 1106;         {Error in GSO_DiskFile.ReName}
  2785.    dskResetError     = 1107;         {Error in GSO_DiskFile.Reset}
  2786.    dskRewriteError   = 1108;         {Error in GSO_DiskFile.Write}
  2787.    dskTruncateError  = 1109;         {Error in GSO_DiskFile.Truncate}
  2788.    dskWriteError     = 1102;         {Error in GSO_DiskFile.Write}
  2789.  
  2790.                              {GSOB_DBF errors}
  2791.    dbfAppendError     = 1206;        {Error in GSO_dBaseDBF.Append}
  2792.    dbfCheckFieldError = 1299;        {Error in GSO_dBaseFLD.CheckField}
  2793.    dbfGetRecError     = 1207;        {Error in  GSO_dBaseDBF.GetRec}
  2794.    dbfHdrWriteError   = 1201;        {Error in GSO_dBaseDBF.HdrWrite}
  2795.    dbfInitError       = 1204;        {Error in GSO_dBaseDBF.Init}
  2796.    dbfPutRecError     = 1202;        {Error in GSO_dBaseDBF.PutRec}
  2797.  
  2798.                              {GSOB_DBS errors}
  2799.    dbsFormulaError    = 2101;        {Error in GSO_dBHandler.Formula}
  2800.    dbsMemoGetError    = 2102;        {Error in GSO_dBHandler.MemoGet}
  2801.    dbsMemoGetNError   = 2103;        {Error in GSO_dBHandler.MemoGetN}
  2802.    dbsMemoPutNError   = 2104;        {Error in GSO_dBHandler.MemoPutN}
  2803.    dbsPackError       = 2105;        {Error in GSO_dBHandler.Pack}
  2804.    dbsSortFile        = 2107;        {Error in GSO_dBHandler.SortFile}
  2805.    dbsZapError        = 2106;        {Error in GSO_dBHandler.Zap}
  2806.  
  2807.                              {GSOB_NDX errors}
  2808.    ndxInitError        = 5101;       {Error in GSO_IndexFile.Init}
  2809.    ndxNdx_AdjValError  = 5102;       {Error in GSO_IndexFile.Ndx_AdjVal}
  2810.  
  2811.                              {GSOB_INX errors}
  2812.    inxRetrieveKeyError = 5211;       {Error in GSO_IdxColl.RetrieveKey}
  2813.  
  2814.                               {GSOB_MMO errors}
  2815.    mmoInitError        = 6101;       {Error in GSO_dBMemo.Init}
  2816.    mmoMemoPutError     = 6102;       {Error in GSO_dBMemo.MemoPut}
  2817.  
  2818.  
  2819.  
  2820.  
  2821.                                       36
  2822.                                                              Griffin Solutions
  2823.  
  2824.  
  2825.    mmoMemoSetParamErr  = 6199;       {Error in GSO_dBMemo4.MemoSetParam}
  2826.  
  2827.                              {GSOBShel errors}
  2828.    shelConfirmUsedArea = 7101;       {Accessed a file area that is not Use'd}
  2829.  
  2830.  
  2831.  
  2832.  
  2833.  
  2834.  
  2835.  
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842.  
  2843.  
  2844.  
  2845.  
  2846.  
  2847.  
  2848.  
  2849.  
  2850.  
  2851.  
  2852.  
  2853.  
  2854.  
  2855.  
  2856.  
  2857.  
  2858.  
  2859.  
  2860.  
  2861.  
  2862.  
  2863.  
  2864.  
  2865.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876.  
  2877.  
  2878.  
  2879.                                       37
  2880. Griffin Solutions
  2881.  
  2882.  
  2883.  
  2884.  
  2885.                               Griffin Solutions
  2886.                            Demonstration Programs
  2887.                                   Synopsis
  2888.  
  2889.  
  2890. Program GSDMO_01              DBase File Creator
  2891.  
  2892.        This program creates a test file for the next several programs.
  2893.  
  2894.        The GSDMO_01.DBF file will be created by using the MakeTestData
  2895.        procedure in GSOB_GEN.PAS.
  2896.  
  2897.  
  2898.  
  2899. Program GSDMO_02               DBase File Lister
  2900.  
  2901.        This program demonstrates how dBase files may be listed using
  2902.        Griffin Solutions units.
  2903.  
  2904.        If the GSDMO_01.DBF file does not exist, the program will display a
  2905.        a message that the file was not found and to run GSDMO_01 to make
  2906.        the file.
  2907.  
  2908.        The program opens a dBase file and proceeds to list selected fields
  2909.        from each record.
  2910.  
  2911.        New procedures/functions introduced are:
  2912.  
  2913.                  CloseDataBases
  2914.                  dEOF
  2915.                  FieldGet
  2916.                  FileExist
  2917.                  GoTop
  2918.                  Select
  2919.                  Skip
  2920.                  Use
  2921.  
  2922.  
  2923.  
  2924. Program GSDMO_03          DBase File Formated Lister
  2925.  
  2926.        This program demonstrates how dBase files may be listed using
  2927.        different field type formats.
  2928.  
  2929.        If the GSDMO_01.DBF file does not exist, the program will display a
  2930.        a message that the file was not found and to run GSDMO_01 to make
  2931.        the file.
  2932.  
  2933.  
  2934.  
  2935.  
  2936.  
  2937.                                       38
  2938.                                                              Griffin Solutions
  2939.  
  2940.  
  2941.        The program opens a dBase file and proceeds to list selected fields
  2942.        from each record.
  2943.  
  2944.        The NumberGet, DateGet, and StringGet commands are shown in the
  2945.        example.  This is intended to contrast them with the basic FieldGet
  2946.        command used to get the field image directly from disk.
  2947.  
  2948.        The NumberGet Procedure returns the actual numeric value in the field.
  2949.        This should be used on Number fields only as it returns a real value.
  2950.  
  2951.        The DateGet Function is used to retrieve a longint Julian Date from
  2952.        the date field.  See GSOB_DTE.PAS for an explanation of Julian Dates.
  2953.        Several other date handling routines are shown, such as SetDateStyle,
  2954.        SetCenturyOn, and DTOC()
  2955.  
  2956.        The StringGet Function returns the trimmed string.
  2957.  
  2958.        DTOC is used to display a 'viewable' date from the longint Julian
  2959.        Date value retrieved by DateGet.
  2960.  
  2961.        New procedures/functions introduced are:
  2962.  
  2963.                  DateGet
  2964.                  DTOC
  2965.                  NumberGet
  2966.                  SetCenturyOn
  2967.                  SetDateStyle
  2968.                  StringGet
  2969.  
  2970.  
  2971.  
  2972. Program GSDMO_04           DBase File Updating
  2973.  
  2974.        This program demonstrates how dBase fields may be modified using
  2975.        Griffin Solutions units.
  2976.  
  2977.        If the GSDMO_01.DBF file does not exist, the program will display a
  2978.        a message that the file was not found and to run GSDMO_01 to make
  2979.        the file.
  2980.  
  2981.        The program opens a dBase file and proceeds to list selected fields
  2982.        from each record.
  2983.  
  2984.        It will reverse all the letters in LASTNAME and write the record
  2985.        back to disk using Replace.
  2986.  
  2987.        Finally, it will read the file back in, list the new values, put
  2988.        the old LASTNAME back to the record by reversing letters again, and
  2989.        writing the record again.
  2990.  
  2991.  
  2992.  
  2993.  
  2994.  
  2995.                                       39
  2996. Griffin Solutions
  2997.  
  2998.  
  2999.        New procedures/functions introduced are:
  3000.  
  3001.                  Replace
  3002.                  StringPut
  3003.  
  3004.  
  3005.  
  3006. Program GSDMO_05           DBase File Appending
  3007.  
  3008.        This program demonstrates how dBase files may be appended using
  3009.        Griffin Solutions units.
  3010.  
  3011.        If the GSDMO_01.DBF file does not exist, the program will  display a
  3012.        a message that the file was not found and to run GSDMO_01 to make
  3013.        the file.
  3014.  
  3015.        The program opens a dBase file, appends a record, and proceeds to
  3016.        list selected fields from each record.
  3017.  
  3018.        New procedures/functions introduced are
  3019.  
  3020.                  Append
  3021.                  ClearRecord
  3022.                  Date
  3023.                  DatePut
  3024.  
  3025.  
  3026.  
  3027. Program GSDMO_06          DBase File Indexing
  3028.  
  3029.        This program demonstrates how dBase files may be indexed using
  3030.        Griffin Solutions units.
  3031.  
  3032.        If the GSDMO_01.DBF file does not exist, the program will display a
  3033.        a message that the file was not found and to run GSDMO_01 to make
  3034.        the file.
  3035.  
  3036.        The program opens a dBase file, creates an index on LASTNAME,
  3037.        and proceeds to list selected fields from each record in LASTNAME
  3038.        sequence.
  3039.  
  3040.        New procedures/functions introduced are:
  3041.  
  3042.                  Index
  3043.                  IndexOn
  3044.  
  3045.  
  3046.  
  3047.  
  3048.  
  3049.  
  3050.  
  3051.  
  3052.  
  3053.                                       40
  3054.                                                              Griffin Solutions
  3055.  
  3056.  
  3057.  
  3058. Program GSDMO_07           DBase Memo File Lister
  3059.  
  3060.        This program demonstrates how dBase memo records may be listed
  3061.        using Griffin Solutions units.
  3062.  
  3063.        The program opens a dBase file GSDMO_07.DBF and proceeds to list
  3064.        selected fields from each record along with its memo record.  If
  3065.        the file does not exist it will be created in dBase IV format.
  3066.  
  3067.        New procedures/functions introduced are:
  3068.  
  3069.                  MemoGet
  3070.                  MemoGetLine
  3071.                  MemoLines
  3072.                  MemoWidth
  3073.  
  3074.  
  3075.  
  3076. Program GSDMO_08       DBase File Structure Lister
  3077.  
  3078.        This program demonstrates how dBase file structures may be listed
  3079.        using Griffin Solutions units.
  3080.  
  3081.        The program opens a dBase file and lists all fields from each
  3082.        record along with its structure.
  3083.  
  3084.        New procedures/functions introduced are:
  3085.  
  3086.                  Deleted
  3087.                  Field
  3088.                  FieldCount
  3089.                  FieldDec
  3090.                  FieldGetN
  3091.                  FieldLen
  3092.                  FieldType
  3093.                  LUpdate
  3094.                  RecCount
  3095.                  RecNo
  3096.  
  3097.  
  3098.  
  3099. Program GSDMO_09           DBase Index Creator
  3100.  
  3101.        Unit to demonstrate more complex index processing.
  3102.  
  3103.        The GSDMO_09.DBF file will be created, if it does not exist, by
  3104.        using the MakeTestData procedure in GSOB_GEN.PAS.  The IndexOn
  3105.        routine will be used to index on LASTNAME.  This can be commented
  3106.        out after the index is created and just use the index by the
  3107.        command: Index('GSDMO_09').
  3108.  
  3109.  
  3110.  
  3111.                                       41
  3112. Griffin Solutions
  3113.  
  3114.  
  3115.        The indexed file will be listed ascending and descending.  Finally,
  3116.        Find is called using the LASTNAME in physical record 35.  The
  3117.        record number of the first occurrence of the name will be returned.
  3118.        This may be record 35, or an earlier record if one exists with the
  3119.        same last name.
  3120.  
  3121.        New procedures/functions introduced are:
  3122.  
  3123.                  dBOF
  3124.                  Find
  3125.                  GoBottom
  3126.                  TrimR
  3127.  
  3128.  
  3129.  
  3130. Program GSDMO_10            DBase Multiple Indexes
  3131.  
  3132.        Unit to demonstrate multiple index processing.  The indexes are
  3133.        first created and then updated with more records to demonstrate
  3134.        multiple indexes may be updated when a dBase record is added or
  3135.        updated.
  3136.  
  3137.        The GSDMO_10.DBF file will be created by using the MakeTestData
  3138.        procedure in GSOB_GEN.PAS.
  3139.  
  3140.        The IndexOn routine will be used to make index GSDMO10A.NDX on
  3141.        LASTNAME+FIRSTNAME and index GSDMO10B.NDX on BIRTHDATE.
  3142.  
  3143.        The indexed file will be listed ascending using GSDM010A.
  3144.  
  3145.        Additional Records will be added to test multiple index update.
  3146.  
  3147.        Finally, the file will be listed again in LASTNAME+FIRSTNAME and
  3148.        BIRTHDATE index sequence.  Note the use of SetOrderTo to switch
  3149.        between which index is the master.
  3150.  
  3151.        New procedures/functions introduced are:
  3152.  
  3153.                  DBFActive
  3154.                  SetOrderTo
  3155.  
  3156.  
  3157.  
  3158. Program GSDMO_11       DBase Relational File Maker
  3159.  
  3160.        This unit creates the files that will be used to demonstrate
  3161.        how to link the relationships between dBase files for data
  3162.        retrieval based on common fields in two files.
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.                                       42
  3170.                                                              Griffin Solutions
  3171.  
  3172.  
  3173.        The code is fairly complex in this routine, since it is busy
  3174.        creating random data for transaction records.  It is available
  3175.        for review, with no promise of how much this will contribute
  3176.        to an understanding of specific Griffin Solutions commands.
  3177.  
  3178.        This will first build a master file and then create a transaction
  3179.        file using the UNIQUEID field in the master file as the key.  The
  3180.        transactions will insert the UNIQUEID field in each record as the
  3181.        MASTERID field.  This field will be used to link back to the master
  3182.        record.
  3183.  
  3184.        A Master file index on the UNIQUEID field will be created.
  3185.        A Master file index on the LASTNAME+FIRSTNAME will be  created.
  3186.        A Transaction file index on the MASTERID field will be created.
  3187.  
  3188.        The Master file will have the structure as defined in GSOB_GEN.PAS.
  3189.        The Transaction file structure is:
  3190.  
  3191.              MASTERID     C    8   0      Uses UNIQUEID from Master Record
  3192.              FULLNAME     C   40   0      In Lastname~FirstName format
  3193.              TRANDATE     D    8   0
  3194.              AMOUNT       N    8   2
  3195.              PAYTYPE      C    1   0
  3196.  
  3197.        New procedures/functions introduced are:
  3198.  
  3199.                  FieldPut
  3200.                  NumberPut
  3201.  
  3202.  
  3203.  
  3204. Program GSDMO_12         DBase Relational File Linkage
  3205.  
  3206.        This unit demonstrates how to link the relationships between
  3207.        dBase files for data retrieval based on common fields in two files.
  3208.  
  3209.        The master file index is on the UNIQUEID field.  This will be used
  3210.        to get the master record based on the MASTERID field in the
  3211.        transaction record.
  3212.  
  3213.        The routine will read each transaction and display transaction
  3214.        information.  It will then find the correct master record and
  3215.        display master information.
  3216.  
  3217.        New procedures/functions introduced are:
  3218.  
  3219.                  Found
  3220.                  Strip_Flip
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.                                       43
  3228. Griffin Solutions
  3229.  
  3230.  
  3231. Program GSDMO_13         DBase Relational File Linkage
  3232.  
  3233.        This unit demonstrates how to search for multiple records with a
  3234.        common identifier.
  3235.  
  3236.        The master file index is on the LASTNAME+FIRSTNAME fields.  The
  3237.        transaction record is located by matching the master record UNIQUEID
  3238.        to the MASTERID field of the transaction record.
  3239.  
  3240.        The routine will read each master record and list all transactions
  3241.        with the master record unique identifier.
  3242.  
  3243.  
  3244.  
  3245. Program GSDMO_14             DBase File Maker
  3246.  
  3247.        Program that creates a dBase file.
  3248.  
  3249.        Demonstrates the use of GS_DB4Build to create a dBase file.  A
  3250.        file 'MYFILE.DBF' will be created.
  3251.  
  3252.  
  3253.  
  3254. Program GSDMO_15        DBase File and Memo Builder
  3255.  
  3256.        This program creates a dBase file 'GSDMO_15.DBF with memo file
  3257.        'GSDMO_15.DBT'.
  3258.  
  3259.        New procedures/functions introduced are:
  3260.  
  3261.                  DTOS
  3262.                  MemoClear
  3263.                  MemoInsLine
  3264.                  MemoPut
  3265.  
  3266.  
  3267.  
  3268. Program GSDMO_16    DBase File and Memo Editor (External)
  3269.  
  3270.        This program reads a dBase file 'GSDMO_07.DBF with memo file
  3271.        'GSDMO_07.DBT'.   It uses an external editor to work with the
  3272.        memo fields.
  3273.  
  3274.             --- WILL NOT COMPILE AS A WINDOWS APPLICATION ---
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.                                       44
  3286.                                                              Griffin Solutions
  3287.  
  3288.  
  3289. Program GSDMO_17            DBase Status Checker
  3290.  
  3291.  
  3292.        Demonstrates use of status checking for long duration operations
  3293.  
  3294.        Several functions in HALCYON can take some time to complete
  3295.        (e.g., IndexOn and Pack).  For this reason, a 'hook' is available
  3296.        to allow the user to gain access and track progress.  The default
  3297.        procedure DefCapStatus ignores the status.  If the user chooses to
  3298.        take advantage of progress reporting, it is done by replacing
  3299.        DefCapStatus with his or her own routines via SetStatusCapture.
  3300.        The status may be ignored again later by setting the default
  3301.        via SetCaptureStatus(DefCapStatus).
  3302.  
  3303.        The following is an example of inserting a user-supplied status
  3304.        reporting procedure.  This sample program demonstrates how this
  3305.        procedure may be installed in a user's program.  All calls to
  3306.        StatusUpdate anywhere in the file object's heirarchy will come
  3307.        through this 'hook'.
  3308.  
  3309.        Constants passed as arguments are contained in the GSOB_VAR unit,
  3310.         they are:
  3311.  
  3312.        StatusStart     = -1;   Signaló starô of  status update information.
  3313.  
  3314.        StatusStop      = 0;    Signals termination of status update.
  3315.  
  3316.        StatusIndexTo   = 1;    Token for IndexTo as passing sorô status.
  3317.  
  3318.        StatusIndexWr   = 2;    Token for IndexTo as passinç writå status.
  3319.  
  3320.        StatusSort      = 5;    Token for Sort passing status information.
  3321.  
  3322.        StatusCopy      = 6;    Token for Copy passing status information.
  3323.  
  3324.        StatusPack      = 11;   Token for Pack passing status information.
  3325.  
  3326.        GenFStatus      = 901;  Token for file record creation report.
  3327.  
  3328.        The structure of a StatusUpdate call is:
  3329.  
  3330.        StatusUpdate(statword1, statword2, statword3);
  3331.  
  3332.        where the statword* values are type longint and will vary depending on
  3333.        the contents of statword1.  For example:
  3334.  
  3335.        if     statword1 = StatusStart
  3336.        then:  statword2 = the calling routine token (StatusIndexTo or
  3337.                           StatusPack.
  3338.               statword3 = the number of records to be processed.
  3339.  
  3340.  
  3341.  
  3342.  
  3343.                                       45
  3344. Griffin Solutions
  3345.  
  3346.  
  3347.        if     statword1 = StatusStop
  3348.        then:  statword2 = 0
  3349.               statword3 = 0
  3350.  
  3351.        if      statword1 = StatusCopy/StatusIndexTo/StatusPack/StatusSort
  3352.        then:   statword2 = current record number being processed
  3353.                statword3 = 0
  3354.  
  3355.        if      statword1 = StatusIndexWr
  3356.        then:   statword2 = current record number being processed
  3357.                statword3 = Pass number
  3358.  
  3359.        New procedures/functions introduced are:
  3360.  
  3361.                  DeleteRec
  3362.                  Pack
  3363.                  SetExclusiveOn
  3364.                  SetStatusCapture
  3365.  
  3366.  
  3367.  
  3368. Program GSDMO_18            DBase Error Handler
  3369.  
  3370.        Demonstrates use of error handling for fatal errors.
  3371.  
  3372.        The following is an example of inserting a user-supplied error
  3373.        handling procedure.  This sample program demonstrates how this
  3374.        procedure may be installed in a user's program.  All calls to
  3375.        Error anywhere in the file object's heirarchy will come through
  3376.        this 'hook'.
  3377.  
  3378.        The program assigns a user-supplied routine to process run error
  3379.        information.   A 'hook' is available to allow the user to gain
  3380.        access to the runtime errors generated by Griffin Solutions objects.
  3381.        The default procedure DefCapError halts the program using RunError.
  3382.        If the user chooses to take advantage of error capture to allow
  3383.        graceful recovery or shutdown, it is done by replacing DefCapError
  3384.        with his or her own routines via SetErrorCapture.
  3385.  
  3386.        Note that the assigned procedure must use far calls ($F+).
  3387.  
  3388.        Griffin Solutions routines call Error for non-recoverable errors.
  3389.        The call is:  Error(Code, Info).  Constants passed as arguments
  3390.        are contained in the GSOB_VAR unit.  The User supplied program must
  3391.        process the error using Code as the run error code.  Info provides
  3392.        additional information about the error.
  3393.  
  3394.        This example routine traps Error Code and Info arguments and then
  3395.  
  3396.  
  3397.  
  3398.  
  3399.  
  3400.  
  3401.                                       46
  3402.                                                              Griffin Solutions
  3403.  
  3404.  
  3405.        translates to text by using an array of error code records.  Several
  3406.        errors have been embedded in the program's main code that will
  3407.        cause RunTime Errors to occur--can you find them all?
  3408.        (answers at the end of the program list)
  3409.  
  3410.  
  3411.  
  3412. Program GSDMO_19            DBase File Sorting
  3413.  
  3414.        This program demonstrates how dBase files may be sorted using
  3415.        Griffin Solutions units.
  3416.  
  3417.        The program creates (if necessary) and opens a dBase file and its
  3418.        memo. It then sorts the file to GSDMO19S.DBF and GSDMO19S.DBT.
  3419.        The sort fields are LASTNAME and FIRSTNAME.
  3420.  
  3421.        Records will only be sorted if they are valid (i.e., deleted records
  3422.        are ignored if SetDeletedOn, and SetFilterThru must validate the
  3423.        record as well).
  3424.  
  3425.        New procedures/functions introduced are:
  3426.  
  3427.                  SortTo
  3428.  
  3429.  
  3430.  
  3431. Program GSDMO_20             DBase Reindexing
  3432.  
  3433.        Unit to demonstrate Reindex. The indexes are first created and
  3434.        listed.  The indexes are then reindexed and listed again to
  3435.        show the Reindex procedure accurately reindexed all index files
  3436.        assigned and maintained the proper master index order.
  3437.  
  3438.        New procedures/functions introduced are:
  3439.  
  3440.                  Reindex
  3441.  
  3442.  
  3443.  
  3444. Program GSDMO_21       DBase File and Structure Copying
  3445.  
  3446.        This program demonstrates how dBase files and file structures may
  3447.        be copied using Griffin Solutions units.
  3448.  
  3449.        The program creates (if necessary) and opens a dBase file and its
  3450.        memo. It then copies the files to new file named GSDMO21A.DBF and
  3451.        GSDMO21A.DBT.  Records will only be copied if they are valid (i.e.,
  3452.        deleted records are ignored if SetDeletedOn, and SetFilterThru must
  3453.        validate the record as well).  You can match the two files and see
  3454.        that record 7 in GSDMO_21.DBF was not copied, because its deletion
  3455.  
  3456.  
  3457.  
  3458.  
  3459.                                       47
  3460. Griffin Solutions
  3461.  
  3462.  
  3463.        flag was set before copying.
  3464.  
  3465.        Next, the file structure only is copied to GSDMO21B.DBF and DBT.
  3466.        This is useful to preserve the file structure for future use.
  3467.  
  3468.        New procedures/functions introduced are:
  3469.  
  3470.                  CopyTo
  3471.                  CopyStructure
  3472.  
  3473.  
  3474.  
  3475. Program GSDMO_22         Getting More Files Open
  3476.  
  3477.        This unit demonstrates how to increase the number of files that can
  3478.        be opened in a program.
  3479.  
  3480.        The program will open all the *.PAS files in the current directory.
  3481.        The procedure SetFileHandles() will allow the program to open as
  3482.        many files as needed at the same time, up to the number passed as
  3483.        the argument (not to exceed 255).  This number cannot exceed the
  3484.         value given in the FILES= command in the AUTOEXEC.BAT file.
  3485.  
  3486.        New procedures/functions introduced are:
  3487.  
  3488.                  SetFileHandles
  3489.  
  3490.  
  3491.  
  3492. Program GSDMO_23              DBase Filters
  3493.  
  3494.        This program demonstrates how the programmer may set filters to
  3495.        determine what records to read from the file.
  3496.  
  3497.        The program will assign the routine FilterName as a filter for
  3498.        GSDMO_23.DBF by using SetFilterThru(FilterName).  This routine
  3499.        will return true if the record's LASTNAME field begins with a
  3500.        letter lower than 'M'.
  3501.  
  3502.        After listing all names that are alphabetically less than M, the
  3503.        filter is turned 'off' by resetting it to its default routine by
  3504.        SetFilterThru(DefFilterCk).  The file is then listed to show all
  3505.        records.
  3506.  
  3507.        Note that SetFilterThru should not be called until a file has been
  3508.        assigned to the selected file area through Use.  If no file has
  3509.        been assigned, Error 1008, Object is not initialized in file area,
  3510.        will halt the program.
  3511.  
  3512.  
  3513.  
  3514.  
  3515.  
  3516.  
  3517.                                       48
  3518.                                                              Griffin Solutions
  3519.  
  3520.  
  3521.        New procedures/functions introduced are:
  3522.  
  3523.                  SetFilterThru
  3524.  
  3525.  
  3526.  
  3527. Program GSDMO_ED                DBase Editor
  3528.  
  3529.        This program demonstrates how to edit a dBase memo file using
  3530.        Griffin Solutions units.
  3531.  
  3532.        If the GSDMO_07.DBF file does not exist, the program will display a
  3533.        a message that the file was not found and to run GSDMO_07 to make
  3534.        the file.
  3535.  
  3536.           ------    CANNOT BE USED IN A WINDOWS ENVIRONMENT   ------
  3537.  
  3538.  
  3539.  
  3540. Program GSDMO_VU                 DBase Viewer
  3541.  
  3542.        This program demonstrates how to view a dBase memo file using
  3543.        Griffin Solutions units.
  3544.  
  3545.        If the GSDMO_07.DBF file does not exist, the program will display a
  3546.        a message that the file was not found and to run GSDMO_07 to make
  3547.        the file.
  3548.  
  3549.           ------    CANNOT BE USED IN A WINDOWS ENVIRONMENT   ------
  3550.  
  3551.  
  3552.  
  3553. Program GSDMOTV1              DBase File Display
  3554.                              TurboVision Sample 1
  3555.  
  3556.        This program demonstrates that the basic Griffin Solutions
  3557.        routines will work in a TurboVision environment.  This demo
  3558.        modifies one of the TP 6 TurboVision documentation programs
  3559.        to use a dBase file.
  3560.  
  3561.        Procedure ReadFile loads the dBase records into an array for
  3562.        display and then closes the file.
  3563.  
  3564.        Memory is at a premium in the IDE using TurboVision.  If you
  3565.        get heap overflow errors or 'strange' things happen, if probably
  3566.        means there is not enough memory to run in the IDE.  To regain
  3567.        memory, you can compile to disk instead of memory.
  3568.  
  3569.           ------    CANNOT BE USED IN A WINDOWS ENVIRONMENT   ------
  3570.  
  3571.  
  3572.  
  3573.  
  3574.  
  3575.                                       49
  3576. Griffin Solutions
  3577.  
  3578.  
  3579. Program GSDMOTV2              DBase File Display
  3580.                              TurboVision Sample 2
  3581.  
  3582.        This program demonstrates that the basic Griffin Solutions
  3583.        routines will work in a TurboVision environment.
  3584.  
  3585.        This demo provides a file viewer using TurboVision methods.
  3586.        One unit, GSV_FLDS.PAS is also used for improved inputline
  3587.        support.
  3588.  
  3589.           ------    CANNOT BE USED IN A WINDOWS ENVIRONMENT   ------
  3590.  
  3591.  
  3592.  
  3593.  
  3594.  
  3595.  
  3596.  
  3597.  
  3598.  
  3599.  
  3600.  
  3601.  
  3602.  
  3603.  
  3604.  
  3605.  
  3606.  
  3607.  
  3608.  
  3609.  
  3610.  
  3611.  
  3612.  
  3613.  
  3614.  
  3615.  
  3616.  
  3617.  
  3618.  
  3619.  
  3620.  
  3621.  
  3622.  
  3623.  
  3624.  
  3625.  
  3626.  
  3627.  
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.                                       50 
  3634.